我正在尝试将脚本连接到Microsoft的World-Wide Telescope应用程序。后者监听端口5050上的命令。它和浏览器运行在同一台机器上(Chrome现在,但据我所知,它的行为与Firefox7和IE9是一样的)。
我在原始html文件中发送了一个"Access-Control-Allow-Origin:*“头文件,试图消除XSS的限制。
我访问WWT的代码如下:
$.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中的网络诊断,我可以看到以下内容:
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,但我已经在我的脚本中尝试过了,它没有什么不同。
我对此感到非常困惑,如果有任何新想法,我将不胜感激。
发布于 2012-05-14 09:20:30
如果其他人遇到这种情况,我们遇到的问题是我们从一个链接发出ajax请求,而不是阻止该链接被跟踪。因此,如果您在onclick
属性中执行此操作,请确保也使用return false;
。
发布于 2013-07-17 17:26:03
如果你使用的是Chrome,你不能在标准的Chrome网络面板中看到足够的信息来确定(canceled)
请求的根本原因。
您需要使用chrome://net-internals/#events
,它将显示您正在发送的请求的详细信息-包括隐藏的重定向/有关正在发送的cookies的安全信息等。
例如,下面的代码显示了一个我在网络跟踪中看不到的重定向--这是由于我的cookie没有跨子域发送造成的:
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)
发布于 2011-10-31 11:15:02
我也遇到过类似的问题。在我的例子中,我尝试使用apache服务器+ django上的web服务(该服务是我自己编写的)。我有和你一样的输出: Chrome说它被取消了,而FF做得很好。如果我尝试在浏览器上直接访问服务,而不是ajax,它也会工作。搜索一下,我发现一些较新版本的apache没有在响应头中正确设置响应的长度,所以我手动进行了设置。对于django,我所要做的就是:
response['Content-Length'] = len(content)
如果您可以控制您尝试访问的服务,请了解如何在您使用的平台中修改响应头,否则您将不得不联系服务提供商来解决此问题。显然,FF和其他许多浏览器都能够正确处理这种情况,但Chrome设计者决定按照规定这样做。
https://stackoverflow.com/questions/7577275
复制相似问题