使用jQuery .ajax()PUT请求API不起作用

时间:2017-03-31 09:51:06

标签: jquery ajax cors put

嗨,我有一个问题,用jquery向api发出PUT请求。

这是我的JavaScript:

var access_token = "##token##";
var service_url = "##url##";

var data = {
    access_token: access_token,
    id: this.getId(),
    content: this.getContent()
};
return $.ajax({
    method: 'PUT',
    url: service_url,
    data: data,
});

当我监视服务器上的来电时,此PUT呼叫将作为OPTIONS呼叫接收。

OPTIONS /##url### HTTP/1.1.
Host: ##host##.
Connection: keep-alive.
Pragma: no-cache.
Cache-Control: no-cache.

以这种方式工作的GET和POST调用。 如果我和Postman做同样的PUT调用,一切都会顺利进行。

我测试了一些类似的东西: contentType:' text / json' 标题:{" X-HTTP-Method-Override":" PUT"} 参数作为查询 参数为JSON

没有任何作用。需要一些帮助。 :)

在服务器上设置CORS标头。 Access-Control-Allow-Origin→*

UPDATE 我在这里找到了解决方案: AJAX in Chrome sending OPTIONS instead of GET/POST/PUT/DELETE?

Chrome会在真实请求之前发出预检请求(OPTIONS)以检查cors标头。在我的情况下,这个电话处理不正确。

我在服务器上向NGINX添加了一些代码然后一切正常。

if ($request_method = 'OPTIONS') {
  add_header 'Access-Control-Allow-Origin' '*';
  add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, OPTIONS';
  add_header 'Access-Control-Allow-Headers' 'Content-Type';
  add_header 'Content-Type' 'text/plain charset=UTF-8';
  add_header 'Content-Length' 0;
  return 204;
} 

2 个答案:

答案 0 :(得分:0)

试试这个:

$.ajax({
method: 'PUT',
url: service_url,
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8"
});

答案 1 :(得分:0)

不是method,而是type

所以

$.ajax({
type: 'PUT',
url: service_url,
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8"
});