2011-07-28 153 views
7

我有一個頁面,其中有一個事件處理程序附加到onclick事件。當事件觸發時,它將文本框的內容傳遞給GET請求。因爲的網址不在同一個域中,所以我創建一個腳本標記,以及URL連接到它的來源是這樣如何使用javascript取消http請求

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),儘管這部作品在Google Chrome .Does任何人知道,如果這些要求可以在Firefox中被取消,如果是的話怎麼辦?


UPDATE 如所建議的由Alfred,我用​​取消請求,但不取消請求,但掛起來。這意味着當我查看螢火蟲時,它看起來像正在提出請求,但沒有任何迴應。

+0

你會考慮使用像[jQuery](http://jquery.com)這樣的庫嗎? –

+1

@Matt球我當然會。但你也可以建議純javascript的bcoz我想了解它是如何完成的? – lovesh

+1

我做了stackoveflow.com搜索,發現[以下答案] [1] [1]:http://stackoverflow.com/questions/117551/javascript-cancel-all-kinds-of - 請求/ 117628#117628 – Alfred

回答

1

難道是確定你使用JS框架?如果是這樣的話,MooTools在它的Request.JSONP對象中內置了這個功能

+0

我不介意使用框架,但我想知道它是如何完成的。你可以解釋或給出解釋 – lovesh

+0

的鏈接,你能解釋它是如何完成的嗎?我看到了鏈接,並且我知道這可以通過javascript +1 – lovesh

+0

查看它的源代碼,它似乎只是從DOM中刪除腳本標記並將腳本變量設置爲null。也許最後一步就是你想要的,因爲只要有引用它,請求就不會被取消。但是不確定。 –

2

這完全是從臀部拍攝的,但是如果腳本標記沒有完成加載,您可能簡單地使用script.parentElement.removeChild(script)。無論如何,這或多或少是mootools所做的。 (從技術上講,他們首先用' '代替/\s+/,但這似乎並不重要)。

+0

這意味着HTTP請求未被取消? – lovesh

+1

它應該等同於XMLHttpRequest.abort();但不能保證,我從來沒有真正做過。 – cwallenpoole

4

解決方案很簡單:用於創建HTTP請求,請使用<img>而不是<script>元素。此外,您總是必須更改元素的相同元素的src屬性。

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標籤。如果多次點擊該按鈕,您會看到所有不完整的請求都會中止。

+0

以及我如何取消請求? – lovesh

+0

@lovesh如果您創建另一個請求,則不完整請求會自動取消。如果你想取消請求而不創建另一個請求,你可以通過設置'img.src ='';'來完成。 – duri