jQuery Ajax请求被取消而未发送

2020/11/20 05:42 · jquery ·  · 0评论

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

我发送带有原始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属性只是“错误”,状态为0。 。

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

当然,这里的区别在于这是GET而不是POST,但是我已经在脚本中尝试过了,这没有什么区别。

我对此感到非常困惑,不胜感激。

如果还有其他人遇到这个问题,我们遇到的问题是我们正在从链接发出ajax请求,而不是阻止链接被遵循。因此,如果要在onclick属性中执行此操作,请确保也执行此操作return false;

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

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

例如,以下内容显示了我在网络跟踪中没有看到的重定向-由我的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)

以我为例type='submit',当我提交表单时,页面在ajax命中之前就已重新加载,因此必须有一个简单的解决方案type="button"如果您未指定类型,则submit默认情况下,因此您必须指定type="button"

type='submit' => type='button'

要么

没有类型=> type='button'

我有一个类似的问题。就我而言,我试图在apache服务器+ django上使用Web服务(该服务由我自己编写)。我的输出与您相同:Chrome表示已取消,而FF没问题。如果我尝试直接在浏览器而不是ajax上访问该服务,那么它也将正常工作。在Google上四处搜寻,我发现某些较新版本的apache未在响应标头中正确设置响应的长度,因此我手动进行了此操作。使用django,我要做的就是:

response['Content-Length'] = len(content)

如果您可以控制要访问的服务,请了解如何在所使用的平台中修改响应标头,否则必须与服务提供商联系以解决此问题。显然,FF和许多其他浏览器能够正确处理这种情况,但Chrome设计师决定按照指定的方式进行处理。

我有一个类似的问题。使用chrome:// net-internals /#events,我能够看到我的问题是由于某些无提示的重定向所致。我的get请求在onload脚本中被解雇了。网址的格式为“ http://example.com/inner-path”,301永久重定向到“ / inner-path”。要解决此问题,我只是将URL更改为“ / inner-path”,从而解决了该问题。我仍然不知道为什么一周前工作的脚本突然给我问题...希望这对某人有帮助

(使用Web窗体ASP.NET)

我的问题是我试图将Ajax取消具有服务器端单击事件设置的提交按钮的单击事件。我不得不将按钮设为一个简单的按钮(即<input type="button">

我遇到了同样的问题,对我来说,我是以临时方式创建iframe的,而在ajax完成之前,我是在删除iframe的,因此浏览器将取消我的ajax请求。

扩展@Kazetsukai的答案,如果您从用户单击链接发出AJAX请求,则可能会遇到此问题。

如果您这样设置链接:

<a href="#" onclick="soAjax()">click me!</a>

然后是一个如下所示的javascript处理程序:

soAjax() {
    $.ajax({ ... all your lovely parameters ... });       
}

为了防止您的浏览器跟踪链接并取消正在进行的任何请求,应添加return falsee.preventDefault()阻止click事件的传播:

soAjax() {
   $.ajax({ ... etc ... });
   return false;
}

要么:

soAjax(e) {
   $.ajax({ ... etc ... });
   e.preventDefault();
}

丢弃AJAX请求时有两种可能性(如果不是跨域请求):

  1. 您并没有阻止该事件的元素默认行为。
  2. 您将AJAX的超时时间设置得太低,或者网络/应用程序后端服务器运行缓慢。

1)解决方案在事件处理程序中添加return false;e.preventDefault();

2)解决方案:在形成AJAX请求时添加超时选项。下面的例子。

$.ajax({
    type: 'POST',
    url: url,
    timeout: 86400,
    data: data,
    success: success,
    dataType: dataType
});

对于跨域请求,请检查跨域资源共享(CORS)HTTP标头。

使用http向要求https的网址发出请求时,出现此错误。我猜ajax调用未处理重定向。即使将crossDomain ajax选项设置为true(在JQuery 1.5.2上),也是如此。

就我而言,我的Apache mod-rewrite匹配url并将请求重定向到https。

在chrome:// net-internals /#events中查看请求。

它将显示请求的内部日志。检查重定向。

我遇到了同样的问题,但就我而言,这是一个cookie问题。在后端工作的家伙已经更改了JSESSIONID cookie的路径,该路径是在我们登录到应用程序时设置的,并且我的计算机上具有该名称的旧cookie,但路径却旧。因此,当我尝试登录浏览器(Chrome)时,将具有不同值的两个名为JSESSIONID的cookie发送到服务器-可以理解的是,它混淆了它-因此它取消了请求。从我的计算机上删除Cookie会对其进行修复。

我以更怪异的方式遇到了此错误:js完成后,“网络”标签和chrome:// net-internals /#events没有显示请求。当在错误callcack中暂停js时,网络标签确实将请求显示为(已取消)。始终在网页中始终要求几个相似请求中的一个(总是相同)。重新启动Chrome后,错误不再出现!

在Firefox中取消了一些ajax调用对我来说工作得很好,但是对于实际上不得不使用它的同事却失败了。

当我通过上述Chrome技巧进行检查时,没有发现任何可疑之处。在萤火虫中检查它时,它在两次恶意呼叫后显示“正在加载”动画,并且没有“结果”选项卡。

解决方案非常简单:进入历史记录,找到网站,右键单击->忘记网站。

忘记,不删除。

之后,再也没有问题了。我的猜测是它与.htaccess有关。

就我而言,这是网址中缺少的结尾斜杠。添加斜杠解决了我的问题。

对于Dropzone.js情况。在我的情况下,这是由于默认情况下timeout选项值太低所致因此,根据您的需要增加它。

{
// other dropzone options
timeout: 60000 * 10, // 10 minutes
...
}

我在特定的3G网络上遇到了这个问题。对于chrome:// net-internals /#events中的

DELETE请求,它总是会失败
net_error = -101

其他网络工作正常,因此我认为代理服务器出现故障。

本文地址:http://jquery.askforanswer.com/jquery-ajaxqingqiubeiquxiaoerweifasong.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!