Javascript jQuery-AJAX请求

Javascript jQuery-AJAX请求,javascript,jquery,Javascript,Jquery,我正在开发一个向web服务发送POST请求的应用程序。我的POST请求如下所示: $.ajax({ type: 'POST', url: getEntityUrl(), cache: 'false', contentType:'application/json', headers: { 'api-key':'myKeyHere', 'Content-Type':'application/json' }, data: { firstName:'Jon'

我正在开发一个向web服务发送POST请求的应用程序。我的POST请求如下所示:

$.ajax({ 
  type: 'POST', url: getEntityUrl(), cache: 'false',
  contentType:'application/json',
  headers: {
    'api-key':'myKeyHere',
    'Content-Type':'application/json'
  },
  data: {
    firstName:'Jon',
    lastName:'Smith'  
  },
  success: function() { alert('good job'); },
  error: function() { alert('oops'); }
});                
当我执行此操作时,我收到一个错误的400请求。我用小提琴看了这个请求。我注意到我发送的参数被发送为
“firstName=Jon&lastName=Smith”
。但是,它们需要作为JSON发送,就像我在
数据中定义的那样。我通过在Fiddler中修改composer中的请求来确认这就是问题所在。我做错了什么


谢谢

您需要对以下数据进行字符串化

$.ajax({
    type: 'POST', 
    url: getEntityUrl(), 
    contentType: 'application/json',
    headers: {
        'api-key': 'myKeyHere',
        'Content-Type': 'application/json'
    },
    data: JSON.stringify({ firstName: 'Jon', lastName: 'Smith' }), //change here
    success: function () { alert('good job'); },
    error: function () { alert('oops'); }
});

如果您通过
data
参数传递jQuery一个普通对象(就像您在这里做的那样),那么它将把数据编码为
application/x-www-form-urlencoded

仅设置
contentType
是不够的

如果要发送JSON,则必须自己对其进行编码。您可以使用
JSON.stringify
来实现这一点

data: JSON.stringify({
  firstName:'Jon',
  lastName:'Smith'  
}),

我也有这个问题。我无法解决,我使用了GET方法。