为什么下面的代码以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响应标头中猜测出它。因此,如果您有一个或多或少遵守HTTP协议并使用Content-Type: application/json响应您的请求的Web服务器,则jQuery会自动将响应解析为javascript对象并放入success回调中,因此您无需指定dataType属性。


注意事项:


您所说的arr不是数组。这是一个具有属性(CityAge)的javascript对象。数组在javascript中用[]表示。例如,[{ City: 'Moscow', Age: 25 }, { City: 'Paris', Age: 30 }]是2个对象的数组。

09-25 17:56
查看更多