【问题标题】:JSON.stringify() or default url encoding for data posted via ajax?JSON.stringify() 或通过 ajax 发布的数据的默认 url 编码?
【发布时间】:2019-12-30 15:53:11
【问题描述】:

在使用jQuery.ajax 函数时,使用JSON.stringify() 发布复杂对象与简单地允许数据的默认url 编码相比有什么区别或优势? 我发布到的 MVC WebApi 能够正确路由和解析这两个请求,因此不需要“显式”将 JSON 发送到服务器。 此外,由于在服务器上启用了 CORS,因此发布 json 会发出一个预检 OPTIONS 请求(我明白为什么......这不是我的问题),而使用默认编码则不会,因此节省了一个网络调用从性能的角度来看,似乎'是有利的。

这两个 ajax 调用都有效。我已经用一个对象进行了测试,该对象还包含一个嵌入式子对象和一个嵌入式数组:

var item = {
    Name: "Joe", 
    Team: "Yankees", 
    Vitals: { Age: 21, Height: "6'0" }, 
    Positions: ["1st", "Right", "DH"]};

// using default url-encoding
$.post(apiUri, item)
.done(function () {alert("Done");})
.fail(function () {alert("Fail");});

// posting a json string
$.ajax({
    url: apiUri,
    contentType: "application/json",
    data: JSON.stringify(item),
    type: "POST"
})
.done(function () {alert("Done");})
.fail(function () {alert("Fail");});

但是,许多 ajax 到 web-api 的示例似乎更倾向于将数据作为 json 字符串发布。

指南或建议?

【问题讨论】:

    标签: jquery json ajax asp.net-web-api


    【解决方案1】:

    使用 JSON.stringify() 发布 JSON 与使用 jQuery.ajax 函数对数据进行默认 url 编码有什么区别或优势?

    这确实不太可比,因为您缺少内容类型。换句话说,将 JSON 发布为 x-www-form-urlencoded 根本不起作用。所以我会调整你的问题更具体:

    与使用 jQuery.ajax 函数的数据的默认 url 编码 (x-www-form-urlencoded/Querystring) 相比,使用内容类型设置为 application/json 的 JSON.stringify() 发布 JSON 有什么区别或优势?

    在我看来(但仍然是事实),最大和最有益的优势是,当您使用 JSON 而不是表单查询字符串时,使用默认模型绑定器将值正确绑定到类所需的工作量是最小的.假设 web-api 使用与 MVC 相同的模型绑定器(我很确定确实如此)绑定表单值可以是 quite tedious and difficult to debug。发布简单的名称值对时往往不是这种情况。

    【讨论】:

    • 是的,我的措辞不正确,我刚刚更正了。我只想发布非原始数据。我不应该说“发布 JSON”。但是,您的其余答案是我正在寻找的那种解释。
    猜你喜欢
    • 2014-06-03
    • 1970-01-01
    • 2018-02-03
    • 2015-05-20
    • 2012-04-30
    • 2013-10-23
    • 2015-07-20
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多