8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

使用 jQuery 发送 JSON 数据

Derek Chia 1月前

39 0

为什么下面的代码发送的数据是 City=Moscow&Age=25 而不是 JSON 格式?var arr = {City:'Moscow', Age:25};$.ajax( { url: \'Ajax.ashx\', type: \'POST\', data: arr,

为什么下面的代码发送的数据不是 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);
        }
    }
);
帖子版权声明 1、本帖标题:使用 jQuery 发送 JSON 数据
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Derek Chia在本站《ajax》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 它被序列化,以便 URI 可以默认读取 POST 请求中的名称值对。您可以尝试将 processData:false 设置为参数列表。不确定这是否有帮助。

  • 您需要设置正确的内容类型并将您的对象字符串化。

    var arr = {City:'Moscow', Age:25};
    $.ajax({
        url: "Ajax.ashx",
        type: "POST",
        data: JSON.stringify(arr),
        dataType: 'json',
        async: false,
        contentType: 'application/json; charset=utf-8',
        success: function(msg) {
            alert(msg);
        }
    });
    
  • 我编写了一个简短的便捷函数来发布 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);
    });
    
  • 因为默认情况下 jQuery 会序列化作为参数传递 data 给 的 $.ajax 。它使用 $.param 将数据转换为查询字符串。

    的 jQuery 文档 $.ajax :

    [ data 参数] 还不是字符串,则将其转换为查询字符串

    如果您想发送 JSON,您必须自己对其进行编码:

    data: JSON.stringify(arr);
    

    请注意,它 JSON.stringify 仅存在于现代浏览器中。如需旧版支持,请查看 json2.js

  • 从技术上讲,JavaScript 中的对象只是关联数组。因此,虽然这样做会造成混淆,但在 JavaScript 中将对象称为数组并不是错误。有关更多信息,请参阅:JavaScript 数据结构

  • 你好,我已经在我的代码中测试过了,但是它不起作用 pastie.org/pastes/7975866/text,为什么?

  • 因为您没有指定请求内容类型,也没有指定正确的 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 不是 数组 。它是一个具有属性( City Age )的 javascript 对象。数组在 javascript 中用 表示 [] 。例如 [{ City: 'Moscow', Age: 25 }, { City: 'Paris', Age: 30 }] 是一个包含 2 个对象的数组。
返回
作者最近主题: