通过jQuery将JavaScript对象发送到web服务器调用-正确的方法是什么?

通过jQuery将JavaScript对象发送到web服务器调用-正确的方法是什么?,javascript,jquery,ajax,json,stringify,Javascript,Jquery,Ajax,Json,Stringify,我试图通过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, 'applicatio

我试图通过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。没有stringify,它也不起作用

$.ajax(url, obj);
您需要将对象作为第二个参数发送

{success:success,data:data}

文档如下:


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

您向ajax函数传递的参数太多了:

另外,
JSON.stringify
调用是不必要的,jQuery将为您解决这个问题

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

“回拨应为参数”是什么意思?我是否将数据放在方括号内?或者这意味着可选?关于类型:'POST'-不需要吗?看起来它是发布的,但Firefox显示我正在将id=45&isRead=true发送为application/x-www-form-urlencodeda实际上在我添加类型:'POST'之前它是一个GET。。。奇怪的是,为什么我必须设置额外的参数,而你却不这么做?默认设置是GET。如果要发布数据(未指定),则必须指定该参数。查看我链接到的文档页面。。。它解释了每个选项的默认值。如果您想要的不是默认值,那么必须提供覆盖默认值的选项。此外,我不会过分担心内容类型,除非它对后端代码很重要。如果您的服务器运行的是PHP,那么它实际上并不关心内容mime类型-数据将以$\u POST或$\u GET格式显示。