Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript取消http请求_Javascript_Events_Firefox_Dom_Request Cancelling - Fatal编程技术网

如何使用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=''