数据在从c#转换到ExtJS时发生变化

本文关键字:变化 ExtJS 转换 数据 | 更新日期: 2023-09-27 18:07:54

当通过ExtJS 4.2.2中的Ajax调用从asp.net c#中的Webmethod传输JSON数据时,在字符串的开始和结束处添加了几个字符。

离开c#前的JSON数据:

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

JSON ExtJS接收到的firebug看到的数据

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

如果JSON数据有一个set root属性,也会发生这种情况。从它出现的地方来看,似乎有什么东西将传入的数据视为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);
    },
});

数据在从c#转换到ExtJS时发生变化

. NET出于安全原因。查看这篇文章了解更多细节。

如果你不熟悉"。我指的是,它只是微软在ASP中添加的安全特性。. NET 3.5的版本ASP。净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;
},