2013-01-18 131 views
0

我試圖從jquery $ .ajax方法發送請求到我在另一個域上創建的.net web服務。我嘗試了很多東西,但仍然無法完成它。我不斷收到的迴應是未定義的。JSONP數據未定義,跨域發佈

有誰能提醒一下嗎?

感謝

.NET代碼

public class Handler1 : IHttpHandler 
    { 

     public void ProcessRequest(HttpContext context) 
     { 
      string callback = ""; 
      try 
      { 
       if (!string.IsNullOrEmpty(context.Request["callback"])) 
       { 
        if (!string.IsNullOrEmpty(context.Request["var1"])) 
         SaveData(context.Request["var1"]); 
        callback = context.Request["callback"]; 


        var oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();      
        string sJSON = oSerializer.Serialize(JSON); 

        HttpContext.Current.Response.ContentType = "application/json"; 
        string qs = HttpContext.Current.Request.QueryString["callback"]; 

HttpContext.Current.Response.Write(callback+"(\"Clients : \"" + sJSON+ ")"); 


       } 

      } 
      catch (Exception exc) 
      { 

       context.Response.Write(callback + 
      "({ \"return\": \"" + exc.Message + "\" })"); 
      } 
     } 

JQUERY

$.ajax({ 
       url:  "URL", 
       dataType: "jsonp", 
       success: function(data){ 
        alert(data); // Always Undefined 


       } 
      }); 
+0

那是什麼'\「客戶:\」'有點在那裏做? – melpomene

+0

即將過去的列表的對象類型轉換爲json。它似乎是不確定的,無論「客戶:」位 – Jamlow

+0

不,事實並非如此。不存在「對象類型」這樣的事情,並且從我所看到的您生成無效的JavaScript('foo(「Clients:」{})'「)。如果刪除'\「客戶端會發生什麼情況:\」'? – melpomene

回答

1

您正在返回破碎JSON這裏:

HttpContext.Current.Response.Write(callback+"(\"Clients : \"" + sJSON+ ")"); 

你注意到\"船尾呃Clients:?你應該把它放在:之前。所以,你的JSON看起來像這樣(如果你用了一個JavaScript調試工具,如螢火蟲,你馬上會注意到,作爲螢火蟲會寫這個錯誤控制檯):

callback("Clients : "[{"ID":1,"Name":"client 1"},{"ID":2,"Name":"client 2"},{"ID":3,"Name":"client 3"}]) 

看這個問題?

從不硬編碼JSON。 永不使用字符串連接來構建JSON。 從不

始終構建或解析JSON時使用JSON序列化程序。

就像這樣:

string sJSON = oSerializer.Serialize(new { Clients = JSON }); 
context.Response.ContentType = "application/json"; 
context.Response.Write(string.Format("{0}({1})", callback, sJSON)); 

在這個例子中,我傳遞一個匿名類型new { Clients = JSON }到JSON序列化,這將照顧到產生正確的和有效的輸出:

callback("Clients":[{"ID":1,"Name":"client 1"},{"ID":2,"Name":"client 2"},{"ID":3,"Name":"client 3"}]) 
+0

感謝您的幫助。我確實看到格式化問題,所以非常感謝。不過,我似乎仍然得到這個字符串的未定義問題Data = oSerializer.Serialize(new {Clients = JSON}); context.Response.ContentType =「application/json」; context.Response.Write(string.Format(「{0}({1})」,callback,Data)); JSON是我傳遞它的一個列表。再次感謝 – Jamlow