6

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.status -> 0

throwError -> (空字符串)

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

4

3 回答 3

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

于 2012-11-26T09:52:15.157 回答
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));
                }
          });
于 2012-11-23T09:20:39.770 回答
2

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

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

并添加callback=?到您的URL

于 2012-11-23T08:10:42.307 回答