jQuery:
$.ajax({
url : url,
type : 'GET',
dataType: 'json',
data: {
'FN' : 'GetPages',
'PIN' : '7659'
},
xhrFields: {
withCredentials: true
},
crossDomain: true,
success: function(data) {
alert('succsess');
console.log('data', data);
},
error: function (xhr, ajaxOptions, thrownError) {
alert('error');
console.log(xhr.status);
console.log(thrownError);
}
});
Firebug 火狐网络
发生了什么
AJAX“错误:”事件被触发,我的console.log输出是:
xhr.状态 -> 0
抛出错误 ->(空字符串)
这正常吗?当我在浏览器中输入 URL 时,我会收到包含 JSON 内容的文件下载,这应该不是问题,对吗?
感谢@CrimsonChin,我知道这是同源策略问题
在计算领域,同源策略是一个重要的安全概念 对于许多浏览器端编程语言,例如 JavaScript。该策略允许脚本在原始页面上运行 从同一站点访问彼此的方法和属性 没有具体限制,但阻止访问大多数方法和 不同网站页面上的属性。[1]
(来自 http://en.wikipedia.org/wiki/Same_origin_policy)
授予 JavaScript 客户端对资源的基本访问权限只需添加一个 HTTP 响应标头,即:
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: http://foo.example.com
Ofc,将 JSON 响应转换为 JSONP 响应也可以。谢谢@djakapm
试试这个
$.ajax({ type : "GET",
url : URL,
data: {
'FN' : 'GetPages',
'PIN' : '7659'
},
xhrFields: {
withCredentials: true
},
crossDomain: true,
dataType : "jsonp",
jsonp : "jsoncallback",
jsonpCallback : "SMS",
cache : true,
success : function(service_data) {
},
error : function(msg) {
alert(JSON.stringify(msg));
}
});
我无法从图像中弄清楚,但是如果您尝试将 AJAX 请求发送到不同的域,则需要使用 JSONP,简单的 AJAX 请求是不够的
尝试将
dataType: 'json'
更改为 dataType: 'jsonp'
并将
callback=?
添加到您的 URL
在我的例子中,状态为“200 OK”,但由于 Django 设置而没有数据:
CORS_URLS_REGEX=r"^/api/.*$"
但我的网址不是以 /api/ 开头。 所以我需要将我的 url 添加到 CORS_URLS_REGEX 表达式或将其注释掉。