如何使用javascript取消http请求
我有一个页面,上面有一个附加到如何使用javascript取消http请求,javascript,events,firefox,dom,request-cancelling,Javascript,Events,Firefox,Dom,Request Cancelling,我有一个页面,上面有一个附加到onclick事件的事件处理程序。当事件触发时,它将文本框的内容传递给GET请求。由于url不在同一个域中,因此我创建了一个脚本标记,并像下面这样将url附加到其源 elem.onclick=fire; function fire() { var text=document.getElementById('text').value; var script=document.createElement("script"); script.className="tem
onclick
事件的事件处理程序。当事件触发时,它将文本框的内容传递给GET
请求。由于url不在同一个域中,因此我创建了一个脚本标记,并像下面这样将url附加到其源
elem.onclick=fire;
function fire()
{
var text=document.getElementById('text').value;
var script=document.createElement("script");
script.className="temp";
script.src="some url"+"?param="+text;
document.body.appendChild(script);
}
现在,如果该事件被触发并且不止一次,我想取消之前的所有GET
请求(因为他们可能仍在接收响应),并使用最新文本发出GET
请求。但为此,我需要取消以前的请求。
我试过了
document.body.removeChild(script);
script.src=null;
但这在Firefox
中不起作用(我使用的是Firefox 5
),尽管这在谷歌Chrome
中起作用。有人知道这些请求是否可以在Firefox中取消,如果是,那么如何取消吗
更新
正如阿尔弗雷德所建议的,我使用了
window.stop
来取消请求,但不取消请求,而是挂断请求。这意味着,当我查看firebug时,它看起来像是发出了请求,但没有响应。我不确定这是否是您所寻找的,但它似乎是一个类似的问题:
使用JS框架可以吗?如果是这样,MooTools将此功能内置到其对象中这完全是即兴发挥,但如果脚本标记尚未完成加载,您可能只需
script.parentElement.removeChild(script)
。这或多或少就是mootools所做的。(从技术上讲,它们首先将/\s+/
替换为'
,但这似乎并不十分重要)。解决方案很简单:要创建HTTP请求,请使用相同的元素的属性
var img;
function fire()
{
var text = document.getElementById('text').value;
var im = img || (img = new Image());
im.src = "url"+"?param="+text;
}
您可以通过执行以下操作来确定它是否真正起作用:您请求的URL应该有很长的响应时间(您可以使用PHP的sleep
函数来确保这一点)。然后,在Firebug中打开Net选项卡。如果您多次单击该按钮,您将看到所有未完成的请求都被中止。为了解决跨域问题,您可以使用CORS(假设您可以更改服务器上的内容):
如果这样做,则可以使用更标准的XMLHttpRequest的abort()函数
CORS兼容除Opera之外的所有主要现代浏览器(http://caniuse.com/cors你会考虑使用类库吗?“Matt Ball,我当然愿意。但是你也可以建议使用纯javascript吗?我想了解它是如何完成的。我在stackoveflow.com上搜索了一下,找到了[以下答案][1][1]:@Alfred hey非常感谢,但u knw当我在firefug的网络面板中查看时,请求似乎已挂断,实际上并未取消,我无法提出任何其他请求too@Alfred我可以取消某个挂起的请求吗?我是在客户端完成的。找不到任何有用的东西尽管这篇链接文章的标题,但它实际上是关于让回发到ASP.NET服务器的工作,并且与ASP.NET特定的细节密切相关。我不介意使用框架,但我想知道它是如何做到的。你能解释一下吗?或者给出一个链接来解释它是如何完成的?我看到了这个链接,我知道这可以在javascript+1中完成,通过查找它的源代码,它似乎只是从DOM中删除脚本标记并将脚本变量设置为null。也许这最后一步是您所缺少的,因为只要有对它的引用,请求就不会被取消。不过我不确定。我试过了,但没用。我可以看到firebug请求仍在处理这意味着HTTP请求没有被取消?它应该相当于XMLHttpRequest.abort()
但是没有保证,我以前从来没有这样做过。我如何取消请求?@lovesh如果您创建另一个请求,则不完整的请求将自动取消。如果要取消请求而不创建另一个请求,可以通过设置img.src=''代码>。