如何使用 $.ajax 发送 JSON 而不是查询字符串?

2022-08-30 01:44:15

有人可以用一个简单的方式解释如何让jQuery发送实际的JSON而不是查询字符串吗?

$.ajax({
    url      : url,
    dataType : 'json', // I was pretty sure this would do the trick
    data     : data,
    type     : 'POST',
    complete : callback // etc
});

这实际上会将精心准备的 JSON 转换为查询字符串。其中一件令人讨厌的事情是,对象中的任何一个都将转换为 ,可能是因为查询刺痛的限制。array: []array[]: []


答案 1

您需要使用 JSON.stringify 首先将对象序列化为 JSON,然后指定,以便您的服务器了解它是 JSON。这应该可以解决问题:contentType

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    contentType: "application/json",
    complete: callback
});

请注意,该对象在支持 JavaScript 1.7 / ECMAScript 5 或更高版本的浏览器中是本机可用的。如果您需要旧版支持,可以使用 json2JSON


答案 2

否,dataType 选项用于分析接收到的数据。

要发布 JSON,您需要通过 JSON.stringify 自行将其字符串化,并将该选项设置为 。processDatafalse

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    processData: false,
    contentType: "application/json; charset=UTF-8",
    complete: callback
});

请注意,并非所有浏览器都支持该对象,尽管jQuery具有,但它不包含字符串;您将需要另一个polyfill库。JSON.parseJSON