【问题标题】:AJAX Return object contains d in asp.net web formAJAX 返回对象在 asp.net web 表单中包含 d
【发布时间】:2016-04-24 11:36:54
【问题描述】:

大家好,这是一个简单的问题,但想停止 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 事情。简单的结果应该是result。谁能解决这个问题。

【问题讨论】:

标签: c# jquery asp.net ajax


【解决方案1】:

您对此无能为力。这就是 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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多