2011-03-31 109 views
1

我打电话这样的功能:jQuery的AJAX失败的原因不明

function(activeOnly, callback) { 
    debug("$.support.cors: {0}".format($.support.cors)); 
    debug("getting data({0})".format(activeOnly)); 
    debug("{0}/data/".format(this._api_root)); 
    $.ajax({ 
     url: "{0}/data/".format(this._api_root), 
     data: { 
      generaldata: !activeOnly 
     }, 
     dataType: "json", 
     headers: { 
      authorization: this._auth_header 
     }, 
     success: function (data, code, jqx) { 
      debug("data request succeeded with {0}".format(data)); 
      result = data; 
     }, 
     error: function(jqx, err, ex) { 
      debug("data request failed with {0}: {1}".format(err, ex));     
     }, 
     complete: function(jqx, status) { 
      debug("data request completed: {0}".format(status));      
     } 
    }); 

对此,错误和完整的函数被调用,以输出结果:

[6192] MyData: $.support.cors: true 
[6192] MyData: getting data({0}) 
[6192] MyData: https://_some_root_/data/ 
[6192] MyData: data request failed with Unknown: Unknown 
[6192] MyData: data request completed: Unknown 

当我使用查尔斯的监视器,这是我得到:

https://_some_root_/ 
Failed 
No request was made. Possibly the certificate was rejected. 
- 
HTTP/1.0 
CONNECT 
- 
/127.0.0.1 
_some_root_/_some_ip_address_ 

3/31/11 3:15:28 PM 
- 
- 
- 
- 
- 
- 
- 
0.02 KB/s 
- 

366 bytes 
- 
- 
- 
366 bytes 
- 
- 

并在请求选项卡中,我可以看到我的请求并没有前夕(注意缺少授权标题):

CONNECT _some_root_:443 HTTP/1.0 
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0) 
Host: _some_root_:443 
Content-Length: 0 
Proxy-Connection: Keep-Alive 
Pragma: no-cache 

什么给?没有提示无法识别的证书或类似的东西 - 它只是失败。 (如果我在浏览器中发出GET请求,它工作正常)。

+0

可以尝试在您的AJAX请求中添加'cache:false'? – 2011-03-31 22:44:33

+0

@LekisS:我试过了,它不起作用。没有意外的是:对于'dataType:“json”','cache'默认设置为false。 – 2011-03-31 22:54:33

+0

@ben是这个跨域ajax? – kjy112 2011-03-31 23:20:47

回答

2

这似乎是a known bug

  1. 据记者了解解决方法/黑客是jQuery的源从

    jQuery.support.cors = testXHR && ("withCredentials" in testXHR); 
    

    改变

    jQuery.support.cors = true; 
    
  2. 一个评论对该错误有这样的说法:

    感谢您的错误报告,但这是 不是jQuery的bug。 Windows 7小工具是 不是支持的jQuery平台。新ajax的传输层为 可插入,因此您应该只包含 定制传输,忽略正常的 跨域支持(或使用 XDomainRequest)。

  3. ...和

    或者更简单地说,设置jQuery.support.cors在脚本真正无侵入jQuery的;)

+0

请注意我的调试日志记录输出,它显示在ajax调用'$ .support.cors = true'之前。 – 2011-04-01 03:02:06

+0

@ Ben Doh!没有看到,抱歉! – 2011-04-01 03:07:16