![](/img/trans.png)
[英]How can I return list object to ajax call back function from asp.net web form?
[英]AJAX Return object contains d in asp.net web form
嘿伙計這是一個簡單的問題,但想要停止ajax返回對象包含d
。
我是asp.net網頁表單
$.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
件事.Simply結果應該是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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.