我对于连接API和Ajax请求等领域有点新鲜。我正尝试向服务器上的API发送POST ajax调用,但是当我从我的机器发送此错误时出现此错误:简单的解决方案没有'Access-Control-Allow-Origin'标题出现在请求的资源上?
没有“Access-Control-Allow-Origin”标头在请求的资源上。因此不允许访问原产地'http://localhost'。响应的HTTP状态码为405.
但是,如果脚本从托管服务器运行,那么我不会收到此错误。当然,我在这里的许多问题中都会读到这个问题,但由于这么多奇怪的术语我无法理解,所以我无法执行任何解决方案。根据我的理解,我尝试了许多这些解决方案,但他们没有奏效。
建议的解决方案之一是“为响应添加标题”。所以我尝试了这样,但它没有工作:
function ajax_insert(data, success_func, error_func) {
$.ajax({
type: "POST",
url: the_url,
data: data,
contentType: 'application/json; charset=UTF-8',
dataType: 'json',
xhrFields: {
withCredentials: true
},
success: function(response) {
response = HttpResponse(json.dumps('{"status" : "success"}'))
response.__setitem__("Content-type", "application/json")
response.__setitem__("Access-Control-Allow-Origin", "*")
success_func(response)
},
error: function(xhr){
error_func(xhr)
}
});
}
我在这里做错了什么?
*“添加一个头到响应”*,你不能在你的客户端做到这一点在问题中的代码片断似乎尝试前端Javascript的方式。所以你需要删除整个'success:function(response)'块。这对你没有任何帮助。 – sideshowbarker 2017-08-18 17:59:44
*“响应的HTTP状态码为405”*表示您要求的服务器以“方法不允许”响应,这意味着它未配置为允许向请求中的URL发送POST请求,否则它没有配置为允许OPTIONS请求。 – sideshowbarker 2017-08-18 18:03:00
'contentType:application/json;你的代码添加到请求中的charset = UTF-8'头会触发你的浏览器首先自动执行[CORS预检选项请求](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS #Preflighted_requests)。因此,如果您提出请求的服务器未配置为允许OPTIONS请求,则该预检将失败,并且您的浏览器将永远不会发送您尝试发送的实际POST请求。所以底线是,你需要检查服务器以确保它配置了CORS支持。 – sideshowbarker 2017-08-18 18:05:04