2014-06-10 37 views
2

在ExtJS 4.2.2中通過Ajax調用從asp.net C#中的Webmethod傳輸JSON數據時,會在字符串的開頭和末尾添加幾個字符。從C#傳輸到ExtJS時JSON數據更改

JSON數據之前留下C#:

[{"ID":"0","NAME":"ALAN"},{"ID":"1","NAME":"BLAKE"}] 

JSON數據通過由ExtJS的

{"d":"[{"ID":"0","NAME":"ALAN"},{"ID":"1","NAME":"BLAKE"}]"} 

這也將發生,如果JSON數據具有一組根屬性接收螢火所見。 從它看起來好像沿線的某處將傳入數據視爲JSON字符串中的變量或類似的東西。在C#結束

代碼:

[WebService(Namespace = "localhost")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
[System.Web.Script.Services.ScriptService] 
public class Director : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true, XmlSerializeString = false)] 
    public string getData() 
    { 
     string json = "[{\"ID\":\"0\",\"NAME\":\"ALAN\"},{\"ID\":\"1\",\"NAME\":\"BLAKE\"}]"; 
     System.Diagnostics.Debug.WriteLine(json); 
     return json; 
    } 
} 

代碼ExtJS的Ajax調用(已經實施的解決方法):

Ext.Ajax.request({ 
    async: false, 
    url: Test061014.ApplicationPath + '/Director.asmx/getData', 
    headers: { 'Content-Type': 'application/json' }, 
    scope: this, 
    success: function (conn, response, options, eOpt) { 
     var s = conn.responseText; 
     s = s.substring(6, (s.length - 2)); 
     s = s.replace(/\\/g, ""); 
     categoryData = JSON.parse(s); 
    }, 
}); 

回答

1

由ASP.NET插入出於安全原因。查看this article瞭解更多詳情。

如果你不熟悉的「.D」我指的是,它只是一個 安全功能,微軟在ASP.NET 3.5的版本 ASP.NET AJAX的補充。通過將JSON響應封裝在父對象中,該框架有助於防禦特別令人討厭的XSS 漏洞。

他們使用dataFilter屬性,所以你可以不用擔心.d一個很好的解決方案。再一次,信貸的文章,這裏是他們的解決方案。您可能需要閱讀文章的不要讓我想到部分,因爲我忽略了一些細節。

dataFilter: function(data) { 
// This boils the response string down 
// into a proper JavaScript Object(). 
var msg = eval('(' + data + ')'); 

// If the response has a ".d" top-level property, 
// return what's below that instead. 
if (msg.hasOwnProperty('d')) 
    return msg.d; 
else 
    return msg; 
}, 
+0

感謝您的幫助 – Mike