2012-11-28 52 views
1

我正在使用处理程序充当服务器与字符串(实际上是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。

回答

0

您的内容类型设置为json,但您似乎没有进行任何编码,即将响应从服务器转换为有效的json。尝试添加如下内容:

response = new JavaScriptSerializer().Serialize(response); 
+0

这很棒!补充说,并通过与String()的变种,它的工作!谢谢! – Dan

0

为什么不尝试使用$.load而不是getJSON如果您不打算在那时将该字符串视为json。

编辑

首先,你应该检查你的成功回调(执行console.log(数据))内部的data值。确保你的服务器端代码返回你想要的内容。