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

时间:2012-11-23 08:04:40

标签: jquery ajax json firefox

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 Firefox网络

Firebug Error http://s14.directupload.net/images/121123/8ar5vljg.png

会发生什么

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

  

xhr.status - > 0

     

thrownError - > (空字符串)

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 :(得分:2)

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

尝试将dataType: 'json'更改为dataType: 'jsonp'

并将callback=?添加到您的URL

相关问题