首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jQuery Ajax请求未发送就被取消

jQuery Ajax请求未发送就被取消
EN

Stack Overflow用户
提问于 2011-09-28 09:05:00
回答 15查看 133.2K关注 0票数 88

我正在尝试将脚本连接到Microsoft的World-Wide Telescope应用程序。后者监听端口5050上的命令。它和浏览器运行在同一台机器上(Chrome现在,但据我所知,它的行为与Firefox7和IE9是一样的)。

我在原始html文件中发送了一个"Access-Control-Allow-Origin:*“头文件,试图消除XSS的限制。

我访问WWT的代码如下:

代码语言:javascript
复制
$.ajax({
    type: 'POST',
    url: url,
    data: data,
    crossDomain: true,
    success: success,
    dataType: dataType
});

本例中的url是"http://127.0.0.1:5050/layerApi.aspx?cmd=new&...“(显然...这里是一些附加参数的简写)。

查看Chrome中的网络诊断,我可以看到以下内容:

代码语言:javascript
复制
Request URL:http://127.0.0.1:5050/layerApi.aspx?cmd=new&...
Request Headersview source
Accept:application/xml, text/xml, */*; q=0.01
Content-Type:application/x-www-form-urlencoded
Origin:http://gwheeler4
Referer:http://gwheeler4/conceptconnect.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1

请求正在发出-我看到WWT创建了一个新的层。但是,我没有收到回调。如果我添加了一个被调用的错误回调,但jqXHR对象上的error属性仅为" error“,而status为0。如果我在Chrome中查看网络请求,我会看到状态为“(已取消)”,但没有响应。

如果使用相同URL并将其粘贴到新的浏览器选项卡中,则可以看到响应是预期的XML。

当然,这里的不同之处在于这是一个GET而不是POST,但我已经在我的脚本中尝试过了,它没有什么不同。

我对此感到非常困惑,如果有任何新想法,我将不胜感激。

EN

回答 15

Stack Overflow用户

发布于 2012-05-14 09:20:30

如果其他人遇到这种情况,我们遇到的问题是我们从一个链接发出ajax请求,而不是阻止该链接被跟踪。因此,如果您在onclick属性中执行此操作,请确保也使用return false;

票数 135
EN

Stack Overflow用户

发布于 2013-07-17 17:26:03

如果你使用的是Chrome,你不能在标准的Chrome网络面板中看到足够的信息来确定(canceled)请求的根本原因。

您需要使用chrome://net-internals/#events,它将显示您正在发送的请求的详细信息-包括隐藏的重定向/有关正在发送的cookies的安全信息等。

例如,下面的代码显示了一个我在网络跟踪中看不到的重定向--这是由于我的cookie没有跨子域发送造成的:

代码语言:javascript
复制
t=1374052796448 [st=  1]   +URL_REQUEST_START_JOB  [dt=261]
                            --> load_flags = 143540481 (DO_NOT_SAVE_COOKIES | DO_NOT_SEND_AUTH_DATA | DO_NOT_SEND_COOKIES | ENABLE_LOAD_TIMING | MAYBE_USER_GESTURE | REPORT_RAW_HEADERS | VALIDATE_CACHE | VERIFY_EV_CERT)
                            --> method = "GET"
                            --> priority = 2
                            --> url = "https://...."
...
t=1374052796708 [st=261]        HTTP_TRANSACTION_READ_RESPONSE_HEADERS
                                --> HTTP/1.1 302 Moved Temporarily
                                    Content-Type: text/html
                                    Date: Wed, 17 Jul 2013 09:19:56 GMT
...
t=1374052796709 [st=262]     +URL_REQUEST_BLOCKED_ON_DELEGATE  [dt=0]
t=1374052796709 [st=262]        CANCELLED
t=1374052796709 [st=262]   -URL_REQUEST_START_JOB
                            --> net_error = -3 (ERR_ABORTED)
票数 113
EN

Stack Overflow用户

发布于 2011-10-31 11:15:02

我也遇到过类似的问题。在我的例子中,我尝试使用apache服务器+ django上的web服务(该服务是我自己编写的)。我有和你一样的输出: Chrome说它被取消了,而FF做得很好。如果我尝试在浏览器上直接访问服务,而不是ajax,它也会工作。搜索一下,我发现一些较新版本的apache没有在响应头中正确设置响应的长度,所以我手动进行了设置。对于django,我所要做的就是:

代码语言:javascript
复制
response['Content-Length'] = len(content)

如果您可以控制您尝试访问的服务,请了解如何在您使用的平台中修改响应头,否则您将不得不联系服务提供商来解决此问题。显然,FF和其他许多浏览器都能够正确处理这种情况,但Chrome设计者决定按照规定这样做。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7577275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档