为什么下面的代码将数据发送为 City=Moscow&Age=25
而不是 JSON 格式?
var arr = {City:'Moscow', Age:25};
$.ajax(
{
url: "Ajax.ashx",
type: "POST",
data: arr,
dataType: 'json',
async: false,
success: function(msg) {
alert(msg);
}
}
);
最佳答案
因为您既没有指定请求内容类型,也没有指定正确的 JSON 请求。以下是发送 JSON 请求的正确方法:
var arr = { City: 'Moscow', Age: 25 };
$.ajax({
url: 'Ajax.ashx',
type: 'POST',
data: JSON.stringify(arr),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
async: false,
success: function(msg) {
alert(msg);
}
});
注意事项:
- 使用
JSON.stringify
方法将 JavaScript 对象转换为现代浏览器内置的原生 JSON 字符串。如果您想支持旧版浏览器,您可能需要包含 json2.js - 使用
contentType
属性指定请求内容类型,以便向服务器指示发送 JSON 请求的意图 dataType: 'json'
属性用于您期望从服务器获得的响应类型。 jQuery 足够智能,可以从服务器Content-Type
响应 header 中猜测它。因此,如果您有一个或多或少遵循 HTTP 协议(protocol)并以Content-Type: application/json
响应您的请求的 Web 服务器,jQuery 会自动将响应解析为 javascript 对象并放入success
回调,这样您就无需指定dataType
属性。
注意事项:
- 您所说的
arr
不是数组。它是一个具有属性(City
和Age
)的 JavaScript 对象。数组在 JavaScript 中用[]
表示。例如[{ City: 'Moscow', Age: 25 }, { City: 'Paris', Age: 30 }]
是一个包含 2 个对象的数组。
关于javascript - 使用 jQuery 发送 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47320980/