Skip to main content
 首页 » 编程设计

c#之AJAX 返回对象在 asp.net web 表单中包含 d

2024年02月05日32sxdcgaq8080

大家好,这是一个简单的问题,但想要阻止 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); 
    } 
}