javascript - jquery ajax中的cors问题
问题描述
// find elements
url = 'https://btacertified.com/api/v1/courses';
apitoken = 'RjBMcmlabzZIa3I0bExSM0ZadnN5MFpRNkg5Y3R6UmcyS25uaTFrZVRUcUQ3RUNBVkpHR09LWVNJbklG5c9a7a09c78b6';
var button = $("button")
$(document).ready(function() {
// handle click and add class
button.on("click", function() {
$.ajax({
url: url,
type: "POST",
crossDomain: true,
data: JSON.stringify({
"a": 1
}),
dataType: "jsonp",
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
headers: {
'Access-Control-Allow-Origin': 'https://jsfiddle.net',
'Authorization': apitoken
},
success: function(response) {
var resp = JSON.parse(response)
alert(resp.status);
},
error: function(xhr, status) {
alert("error");
}
});
})
});
<!doctype html>
<html lang="en">
<head>
<title></title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div id="banner-message">
<button>Click Me</button>
</div>
</body>
</html>
我正在使用标头中的 apitoken 授权进行发布 API 以检索 json。
我收到一个 CORS 错误,它是“被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有 'Access-Control-Allow-Origin' 标头”。
PS:我检查了类似的 CORS 帖子对我没有任何作用,我无法控制 3rd 方 API 服务器,所以我不能在那里添加任何标题。使用 JSONP 我得到 405 错误
但我可以通过 apitest.com 在以下链接中看到结果。 https://apitester.com/shared/checks/27522c9ca1dc4e7f89fe488f3864909f
解决方案
Charlietfl 是正确的,但如果您知道 api 可以处理 CORS 请求,您可能希望从您的请求中删除 access-control-allow-origin (我相信这是一个响应标头)并且您确定要将数据类型设置为 JSONP?也许摆脱这条线,让服务器决定(现在大多数 API 不需要 JSONP)。
推荐阅读
- python - 如何使用 Ajax-JavaScript 在 HTML 中单击选项时更改 django 中的值?
- flutter - 如何使用 API 和本地数据存储正确构建 Flutter 项目?
- c - 遍历字符串中的字符
- python - 通过这段代码我想收集面部样本,但它给出了错误
- c# - 我正在尝试为学校作业写一些(OOP),但我遇到了一些问题
- ios - 后台控制屏幕的 iOS 应用程序
- python - 散景:网格图到组件的灵活布局选项
- python - 如何从组中选择
- performance - 基于症状的监测和基于原因的监测是什么意思?
- android - 如果微调器放置在对话框上,微调器项目会在顶部被切断