Jquery 为什么web服务将数据返回为msg.d
我发现我的webmethod返回的数据为Jquery 为什么web服务将数据返回为msg.d,jquery,asp.net,json,web-services,javascriptserializer,Jquery,Asp.net,Json,Web Services,Javascriptserializer,我发现我的webmethod返回的数据为 { "d": [ {"id":"1","itemtxt":"Masters"}, {"id":"2","itemtxt":"Transactions"}, {"id":"3","itemtxt":"Misch. Reports"} ] } 如果您注意到,数组的名称为d。为什么呢?有什么规定吗 为供参考,我将返回一个对象列表 这是什么意思?我从webmethod发送的任何数据都是一样的吗?或者它将根据我的数据类型/类类型而改变 编辑
{ "d":
[
{"id":"1","itemtxt":"Masters"},
{"id":"2","itemtxt":"Transactions"},
{"id":"3","itemtxt":"Misch. Reports"}
]
}
如果您注意到,数组的名称为d。为什么呢?有什么规定吗
为供参考,我将返回一个对象列表
这是什么意思?我从webmethod发送的任何数据都是一样的吗?或者它将根据我的数据类型/类类型而改变
编辑
下面是webmethod
[WebMethod]
public List<webitem> GetSubModules(string key)
{
string s = " order by smid";
if (key != null)
s = " where moduleid=" + key + s;
return Utility.GetDDLVal("Select smid id,smname itemtxt from m_submodules "+s, null, null);
}
作为ASP.NET的一部分,它有点安全性。只要不更改序列化程序,它就会一直存在。大卫·沃德(David Ward)的博客现在已经不存在了,它说的是: 所有ASMX服务JSON都是通过ASP.NET 3.5中的ASP.NET AJAX扩展序列化的。即使只返回标量返回值,例如字符串、int或布尔值,结果也将始终包含在“d”中 以及原因: {d:1} 不是有效的JavaScript语句,其中如下所示: [1] 是 因此,d参数的包装可以防止字符串作为脚本直接执行。无需担心对象或数组构造函数
我看不到任何回报。。。代码更新了webmethod,返回代码为{d:1}在JS中完全有效-因此,例如{d:console.logDo Evil}在nodejs中完全执行,这是您的参考博客解释它试图防止的安全问题。因此,包装不提供任何安全afaik。在链接的博文中有更多的细节。回复很晚,但安全性是关于json的,而不是JavaScript。上面的例子不起作用。JSON.parse{\d\:console.log\Do Evil\}。对于数组示例,它可以成功解析并导致执行。
[WebMethod]
public List<webitem> GetSubModules(string key)
{
string s = " order by smid";
if (key != null)
s = " where moduleid=" + key + s;
return Utility.GetDDLVal("Select smid id,smname itemtxt from m_submodules "+s, null, null);
}