大家好,这是一个简单的问题,但想要阻止 ajax 返回对象包含 d。
我是asp.net web 表单
$.ajax({
type: "POST",
url: myurl,
data: JSON.stringify({value:"1"}),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
//alert("i am in success");
console.log(result);
},
failure: function (response) {
console.log("I am in failure");
}
});
和 在 .cs 文件中
[WebMethod]
public static string getSpareParts(string value)
{
List<data> spareParts;
using (var db = new WaltonCrmEntities())
{
spareParts = db.SpareParts.Select(x => new data
{
id = x.ItemID,
text = x.ItemName
}).ToList();
}
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Serialize(spareParts);
//return spareParts;
}
当返回结果时,它将在 result.d 中包含结果,但我想停止这个 d 事情。简单的结果应该是 result。谁能解决这个问题。
请您参考如下方法:
对此您无能为力。这就是 ASP.NET WebMethods 始终序列化响应的方式。 Microsoft 决定将响应包装在此 .d 属性中的原因是为了防止这种特殊的 JSON hijacking vulnerability .当然,无论此属性是否存在,您始终可以检查 success 回调:
success: function (result) {
var data = result.hasOwnProperty('d') ? result.d : result;
console.log(data);
}
此外,我强烈建议不要在您的 WebMethod 中编写管道代码(例如序列化的东西),而只是返回正确的对象并让基础架构关心序列化:
[WebMethod]
public static List<data> getSpareParts(string value)
{
using (var db = new WaltonCrmEntities())
{
return db.SpareParts.Select(x => new data
{
id = x.ItemID,
text = x.ItemName
}).ToList();
}
}
现在在你的成功回调中你可以直接使用这个集合而不需要另外 JSON.parse 它:
success: function (result) {
var data = result.hasOwnProperty('d') ? result.d : result;
for (var i = 0; i < data.length; i++) {
console.log('id: ' + data[i].id + ', text: ' + data[i].text);
}
}
