交叉起源ajax请求不以JSON格式传递Request Payload

时间:2014-07-23 00:51:32

标签: javascript jquery ajax json cors

我正在编写一个进行服务呼叫的Chrome扩展程序。

当我创建一个相同的原始POST ajax请求时,我的数据对象将以JSON格式传递:

 $.ajax(sameOriginURL, {
    data : {
      "foo1": "bar1",
      "foo2": "bar2"
    },
    dataType: "json",

    headers: { 'Content-Type':'application/json'}
 })

在chrome调试器中,当我看到post请求时,请求有效负载显示为:

 {ContentType: "JSON", foo1: "bar1", foo2: "bar2"}

但是当我使用cross origin requst做同样的事情时(在该请求中插入crossOriginURL来代替sameOriginURL),在chrome调试器中,post请求会显示请求有效负载,如下所示:

foo1=bar1&foo2=bar2

我正在调用的服务不喜欢这样,所以它会引发序列化异常。如何将我的请求有效负载作为JSON对象传递。

1 个答案:

答案 0 :(得分:3)

在此处找到答案:JQuery Post sends form data and not JSON

我所要做的就是用JSON.stringify包装我的数据对象,它有效!!

$.ajax({
  type: 'POST',
  url: '<url>',
  contentType: 'application/json; charset=utf-8',
  dataType: 'json',
  data: JSON.stringify(object)
});