嗨,我有一个问题,用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;
}
答案 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"
});