jQuery AJAX 状态“200 OK”,但没有数据响应

问题描述 投票:0回答:4

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 火狐网络

Firebug Error

发生了什么

AJAX“错误:”事件被触发,我的console.log输出是:

xhr.状态 -> 0

抛出错误 ->(空字符串)

这正常吗?当我在浏览器中输入 URL 时,我会收到包含 JSON 内容的文件下载,这应该不是问题,对吗?

jquery ajax json firefox
4个回答
10
投票

感谢@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

(来自 http://enable-cors.org/

Ofc,将 JSON 响应转换为 JSONP 响应也可以。谢谢@djakapm


3
投票

试试这个

$.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));
                }
          });

2
投票

我无法从图像中弄清楚,但是如果您尝试将 AJAX 请求发送到不同的域,则需要使用 JSONP,简单的 AJAX 请求是不够的

尝试将

dataType: 'json'
更改为
dataType: 'jsonp'

并将

callback=?
添加到您的
URL


0
投票

在我的例子中,状态为“200 OK”,但由于 Django 设置而没有数据:

CORS_URLS_REGEX=r"^/api/.*$" 

但我的网址不是以 /api/ 开头。 所以我需要将我的 url 添加到 CORS_URLS_REGEX 表达式或将其注释掉。

© www.soinside.com 2019 - 2024. All rights reserved.