2012-11-28 50 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值。確保你的服務器端代碼返回你想要的內容。