【问题标题】:jQuery ajax fails for unknown reasonjQuery ajax 因未知原因失败
【发布时间】:2011-03-31 20:20:39
【问题描述】:

我正在调用这样的函数:

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

当我使用 Charles 进行监控时,我得到的是:

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 请求,它就可以正常工作)。

【问题讨论】:

  • 您可以尝试在您的 AJAX 请求中添加 cache: false 吗?
  • @LekisS:我试过了,但没用。这并不奇怪:对于dataType: "json"cache 默认设置为 false。
  • @ben 这是跨域ajax吗?
  • 尝试使用fiddler2.com/fiddler2 进行诊断,以查看实际发送和接收的内容。似乎浏览器可能会在返回 javascript 上下文之前尝试处理其他事情。
  • @kjy112 是的。但是,小工具运行时应该允许跨域请求。

标签: javascript jquery ajax windows-desktop-gadgets


【解决方案1】:

这似乎是a known bug

  1. 根据记者的说法,解决方法/hack 是更改 jQuery 源代码

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

    jQuery.support.cors = true; 
    
  2. 对该错误的评论是这样说的:

    感谢您的错误报告,但这是 不是 jQuery 错误。 Windows 7 小工具是 不是受支持的 jQuery 平台。这 新 ajax 的传输层是 可插拔,所以你应该只包括 忽略正常的自定义传输 跨域支持(或使用 XDomainRequest)。

  3. ...和

    或者,更简单地说,在您的脚本中将 jQuery.support.cors 设置为 true,而无需侵入 jQuery;)

【讨论】:

  • 请注意我的调试日志输出,它显示在 $.support.cors = true 的 ajax 调用之前。
  • @Ben Doh!没看到,抱歉!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多