将字符串从IHttpHandler传递给Javascript,然后传递给Silverlight
问题描述:
我正在使用处理程序充当服务器与字符串(实际上是xml,但我尝试使用字符串)和我的Silverlight应用程序之间的代理。我已经编写了处理程序,它正确地收集了字符串(xml)。我遇到的问题是将该字符串从JSON转换为可以传回给我的Silverlight代码的字符串。将字符串从IHttpHandler传递给Javascript,然后传递给Silverlight
的Javascript:(取出安全的BaseURL)
private void button1_Click(object sender, RoutedEventArgs e)
{
HtmlPage.Window.Invoke("xmlStart");
string test = (String)HtmlPage.Window.Invoke("getXml");
textBox1.Text = test;
}
公正的情况下处理代码:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
var xmlReturn = new String("");
function xmlStart() {
$.getJSON('xmlProxy.ashx', function (data) {
setXml(data);
});
}
function setXml(data) {
xmlReturn = data;
}
function getXml() {
alert(xmlReturn);
return xmlReturn;
}
的Silverlight
namespace HttpHandler_Proxy
{
public class xmlProxy : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
WebClient getCap = new WebClient();
string baseurl = "some_url";
string response = getCap.DownloadString(baseurl);
context.Response.ContentType = "application/json";
context.Response.Write(response);
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
我相对论新双方的Javascript和jQuery,所以这可能是一个微不足道的问题,为此我表示歉意。在此版本的代码中,它从不将xmlReturn
设置为除""
之外的任何其他内容
我已经完成了其他版本,但代码总是以null/undefined /“”返回Silverlight。
答
您的内容类型设置为json,但您似乎没有进行任何编码,即将响应从服务器转换为有效的json。尝试添加如下内容:
response = new JavaScriptSerializer().Serialize(response);
答
为什么不尝试使用$.load
而不是getJSON
如果您不打算在那时将该字符串视为json。
编辑
首先,你应该检查你的成功回调(执行console.log(数据))内部的data
值。确保你的服务器端代码返回你想要的内容。
这很棒!补充说,并通过与String()的变种,它的工作!谢谢! – Dan