【发布时间】:2017-03-19 07:11:56
【问题描述】:
在我的应用程序中,当我进行以下两步调用时,我在第二次 AJAX 调用时遇到预检错误:
$.ajax({
type:'POST',
url:'https://podio.com/oauth/token',
data: {
'grant_type': 'app',
'app_id': '#####',
'app_token': '#####',
'client_id': '#####',
'redirect_uri': '#####',
'client_secret': '#####'
}
}).done(function(response){
$.ajax({
type:'PUT',
contentType: "application/json",
headers: {'Authorization': 'OAuth2 ' + response.access_token},
url:'https://api.podio.com/item/1/value/142784383',
data: JSON.stringify({"values": "doofus@test.com"})
}).done(function(response){
console.log(response)
}).fail(function(error){
console.log(error)
})
})
Chrome 中的错误(开启 CORS Toggle 浏览器扩展)如下:
jquery.min.js:4 选项https://api.podio.com/item/1 400 () test.html:1 XMLHttpRequest 无法加载 https://api.podio.com/item/1/value/142784383。预检响应 具有无效的 HTTP 状态代码 400
和 Safari 日志
Failed to load resource: the server responded with a status of 403 (HTTP/2.0 403)
参考https://api.podio.com/item/1/value/142784383
尽管我在自己的应用程序中多次使用过这样的 AJAX 调用,但我对与外部 API 交互的一些细微差别还是有些陌生。对此问题的原因和解决方案的任何见解将不胜感激。
【问题讨论】:
-
不确定是不是这个问题,但需要发送:
JSON.stringify({ values: doofus@test.com }) -
@KobyDouek 不要这么认为,内容类型意味着json本身可以工作。
-
@Achshar 是的,但无论如何这是正确的语法
-
JSON.stringify({"values": "doofus@test.com"}) 似乎是对的。在您的代码中,电子邮件需要用引号引起来。
-
@skwidbreth 当内容类型是异国情调时,浏览器会发送一个选项(预检)请求。您的 api 需要处理此 OPTIONS 请求。因此,请确保服务器在选项请求中发送 200 以及可接受的内容类型标头。 developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS