AJAX 发送 json 数据 PUT 请求其他域问题.

使用 node 的 hapi 框架,起了 API service. 再在一个项目里面通过 ajax 去请求这个 API 发生跨域问题.

route.options.cors
Default value: false (no CORS headers).

The Cross-Origin Resource Sharing protocol allows browsers to make cross-origin API calls. CORS is required by web applications running inside a browser which are loaded from a different domain than the API server. To enable, set cors to true

这个是 hapi 的文档,开启这个就可以允许 ajax 的跨域请求了.

实际上,确实也可以成功的发送了 ajax 的 get 请求.如图:

clipboard.png

问题出现在 发送 PUT 请求:

clipboard.png

看起来是不允许我发送 MIME type application/json 数据.

那我把 ajax 函数里面的

headers:{
            contentType:"application/json"
          },

去掉再请求:

clipboard.png

发现已被允许请求.

返回 500 是因为,我的 API 是按 json 接受解析的. 比如 user 下 id 的值 是 this.request.payload.User.id 来获取的. 但是如果是 x-www-from 格式的数据, 则要改变为 this.request.payload.User[id] 来获取.

我想知道这个 put 发送 json 数据的请求不被允许是哪里出了问题.

阅读 4.3k
2 个回答

cors 选项配一下 additionalHeaders.

cors: {
    additionalHeaders: ['Content-Type']
}

这样你客户端就可以带 contentType:"application/json" 头了

? 好了, API 是没什么问题,服务端设置也没问题,是我用 Jquery 的 AJAX 的方法参数放错了位置.

$.ajax({
  url: url,
  type: 'PUT',
  dataType: 'json',
  headers:{
    "authorization": tblMessageAPIServerAccessToken,
     contentType: "application/json",
  },
  data: params,
  success: function (res) {
    
  },
  error: function (res) {
    
  }
});

正确的写法:

$.ajax({
  url: url,
  type: 'PUT',
  dataType: 'json',
  contentType: "application/json",
  headers:{
    "authorization": tblMessageAPIServerAccessToken,
  },
  data: params,
  success: function (res) {
    
  },
  error: function (res) {
    
  }
});

我把contentType 放在 headers 里面了......


but , 实际测试中,把他放在 headers 里,也会对发送过去的数据产生影响.....

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题