XMLHttpRequest无法加载http://example.com/myapp/jsonurl/。请求的资源缺少'Access-Control-Allow-Origin'头部
在Django项目的HTML页面中使用$.ajax()
请求,结果在Firefox上能正常工作,但在Chrome上却不行。我在谷歌上尝试了很多方法,但都没有结果,浪费了两天时间,请帮帮我。
在Chrome控制台上出现的错误信息是:
XMLHttpRequest无法加载http://example.com/myapp/jsonurl/。
请求的资源上没有'Access-Control-Allow-Origin'
这个头信息。因此,来自'http://www.example.com'的请求被拒绝了。
我的代码是:
ajax code:
$.ajax({
url: "http://example.com/myapp/jsonurl/",
dataType:"json",
type:"GET",
success: function(data){
alert(data);
},
error: function(xhRequest, ErrorText, thrownError){
alert(xhRequest+ ErrorText+thrownError);
}
});
网址:
url(r'^jsonurl/', planViews.jsonurl,name='jsonurl'),
视图:
def jsonurltest(request):
context = RequestContext(request)
return HttpResponse(json.dumps("{'jsondata':'ajax test'}"), content_type="application/json")
2 个回答
0
有两种解决办法:
第一种是确保使用相同的名称(比如都用www.example.com)。
第二种是如果你必须使用两个不同的名称,确保提供AJAX请求的服务器添加一个头信息:
Access-Control-Allow-Origin: http://www.example.com
想了解更多信息,可以查看这里:http://jquery-howto.blogspot.com/2013/09/jquery-cross-domain-ajax-request.html
0
最后我找到了问题的解决办法,我的项目里有两个问题。
1:安装这个库 https://github.com/ottoyiu/django-cors-headers
2:我在我的视图里用了“@login_required”,当我把它去掉后,所有浏览器,包括Chrome,都能正常工作了。