用jQuery发送JSON数据

用jQuery发送JSON数据

为什么下面的代码发送数据为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);
        }
    });


holdtom
浏览 314回答 3
3回答

森林海

因为您没有指定请求内容类型,也没有更正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字符串,JSON字符串是本机并内置到现代浏览器中的。如果您想支持旧的浏览器,您可能需要包括json2.js控件指定请求内容类型。contentType属性,以便向服务器指示发送JSON请求的意图。这个dataType: 'json'属性用于您希望从服务器获得的响应类型。jQuery足够聪明猜它来自服务器Content-Type响应头。因此,如果您有一个Web服务器,它或多或少地尊重HTTP协议,并使用Content-Type: application/json对于您的请求,jQuery将自动将响应解析为javascript对象到success回调,这样您就不需要指定dataType财产。要小心的事情:你所说的arr是不是数组..它是一个具有属性的javascript对象(City和Age)。数组用[]在javascript里。例如[{ City: 'Moscow', Age: 25 }, { City: 'Paris', Age: 30 }]是一个由两个对象组成的数组。

HUWWW

因为默认情况下jQuery序列化作为data参数$.ajax..它用$.param若要将数据转换为查询字符串,请执行以下操作。的jQuery文档$.ajax:[data参数]被转换为查询字符串,如果不是已经转换为字符串的话。如果要发送JSON,则必须自己编码:data: JSON.stringify(arr);请注意JSON.stringify只存在于现代浏览器中。对于遗留支持,请查看json2.js

叮当猫咪

我为发布JSON编写了一个简短的方便函数。$.postJSON = function(url, data, success, args) {   args = $.extend({     url: url,     type: 'POST',     data: JSON.stringify(data),     contentType: 'application/json; charset=utf-8',     dataType: 'json',     async: true,     success: success  }, args);   return $.ajax(args);};$.postJSON('test/url', data, function(result) {   console.log('result', result);});
打开App,查看更多内容
随时随地看视频慕课网APP