数据在从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);
},
});
. 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;
},