【问题标题】:Send JavaScript object to web server call via jQuery - what is the correct way?通过 jQuery 将 JavaScript 对象发送到 Web 服务器调用 - 正确的方法是什么?
【发布时间】:2011-10-20 07:18:27
【问题描述】:

我正在尝试通过 jQuery 将 JSON 数据发送到我的 Web 服务器,但遇到了错误。 未捕获的 TypeError:无法使用 'in' 运算符在 {"id":45,"isRead":true}

中搜索 'context'

我正在测试的代码:

var obj = {};
obj.id = 45;
obj.isRead = true;
var data = JSON.stringify(obj);
var url = "/notification/read"
$.ajax(url, data, 'application/json', function() {
    // code remove notification from the DOM
    });
});

有没有更好或更正确的方法来做到这一点?不确定我是否在 $.ajax 调用中获得了正确的参数。

更新
我开始工作的代码

var obj = {
    id: 45,
    isRead: true
};
var json = JSON.stringify(obj);
var url = "/notification/read"
$.ajax({ url: url, 
         type:'POST', 
         contentType: 'application/json', 
         data: json, 
         success: function(data, textStatus) {
            // do stuff
         }
});

我的服务器期望 JSON 数据以 application/json 形式发布。那么我认为我需要所有这些变量是错误的吗?如果没有这些,它将作为 GET 发送并且是 application/x-www-form-urlencoded。没有字符串化它也不起作用。

【问题讨论】:

    标签: javascript jquery ajax json stringify


    【解决方案1】:

    您向 ajax 函数传递的参数过多:http://api.jquery.com/jQuery.ajax/

    另外,JSON.stringify 调用不是必需的,jQuery 会为您处理。

    var obj = {
      'id':45,
      'isRead':true
    };
    $.ajax({
      url: "/notification/read",
      data: obj,
      success: function(data, textStatus){
        /* code here */
      }
    });
    

    【讨论】:

    • type:'POST' 怎么样 - 不需要?
    • 似乎正在发布,但 Firefox 显示我正在发送 id=45&isRead=true as application/x-www-form-urlencoded
    • 实际上在我添加 type:'POST' 之前它是一个 GET ......奇怪为什么我必须设置额外的参数而你没有?
    • GET 是默认值。如果您希望发布数据(您没有指定),则必须指定该参数。查看我链接到的文档页面......它解释了每个选项的默认值是什么。如果您想要默认值以外的其他内容,则必须提供覆盖默认值的选项。
    • 另外,我不会过多担心内容类型,除非它对您的后端代码很重要。如果您的服务器正在运行 PHP,那么它真的不关心内容 mime 类型 - 数据将在 $_POST 或 $_GET 中。
    【解决方案2】:
    $.ajax(url, obj);
    

    您需要发送一个对象作为第二个参数

    {成功:成功,数据:数据}

    【讨论】:

    • “回调应该是参数”是什么意思?我将数据放在方括号中吗?或者这是否意味着可选?
    【解决方案3】:

    文档在这里:

    http://api.jquery.com/jQuery.ajax/

    您必须将参数作为一个对象传递,而不是多个对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 2019-12-09
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2018-07-31
      相关资源
      最近更新 更多