通过ajax发布的数据的JSON.stringify()或默认url编码?

时间:2014-07-11 21:53:38

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

在使用JSON.stringify()函数时,使用jQuery.ajax发布复杂对象而不是简单地允许数据的默认网址编码有什么区别或优势? 我发布的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");});

然而,许多针对web-api示例的ajax似乎倾向于将数据发布为json字符串。

指南或建议?

1 个答案:

答案 0 :(得分:1)

  

使用JSON.ajax函数在数据的默认url编码上使用JSON.stringify()发布JSON有什么区别或优势?

由于缺少内容类型,这实际上并不具有可比性。换句话说,将JSON发布为x-www-form-urlencoded根本不起作用。因此,我会将您的问题调整为更具体:

  

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

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