2011-10-27 34 views
4

我在讀here jquery中的同步ajax調用不超時。爲什麼不在jquery支持超時中同步ajax調用?

這是一個技術限制,還是隻是作者不想支持的東西?當一個ajax調用是同步的時候,表下實際發生了什麼?

+4

基本上,在同步ajax請求期間,瀏覽器被阻塞,並且在瀏覽器被阻止時不能執行javascript。正因爲如此,jQuery無法在設置超時後放棄ajax請求,因爲jQuery是javascript,而且在瀏覽器被阻止時無法執行javascript。這是同步ajax的主要缺陷。 –

+0

@KevinB - 這就是我正在尋找的答案,我恰巧也發現了這個答案。我認爲關鍵是瀏覽器處理同步/異步,而不是超時。如果瀏覽器超時作爲XHR api的一部分,這不會是一個問題 – pepsi

+0

如果你不能脫離同步ajax,第二個最好的解決方案是在服務器端實現超時,以便如果它長於x秒,它返回一個500頭。 –

回答

9

瀏覽器通過XMLHttpRequest API處理同步/異步請求,但它沒有內置的超時功能。 JQuery在瀏覽器XHR API之上實現了自己的JavaScript超時。

由於同步調用會阻塞所有正在運行的腳本,因此JQuery超時不起作用。從理論上講,如果在瀏覽器級別實現同步超時,則可能會有可能,而JS級別則不然。

2

一個同步AJAX調用會阻塞,直到請求完成。由於技術原因,實現超時是不可能的,因爲AJAX調用將不得不稍後執行。

如果稍後執行AJAX調用,該函數必須實現阻塞功能,以阻止代碼在AJAX調用後繼續運行,並在超時後再次執行 - 這是不可能的。

0

的確,與AJAX請求的性質有關的事情,jQuery不能修改這個。

我覺得在這種情況下,應該在服務器端實現超時。

相關問題