2014-07-21 82 views
5

按照規範我已經爲這個特定的項目給出了,我有幾十個AJAX請求都在同一時間啓動,並且結果顯示完成後儘快給出響應。當一個AJAX請求開始時檢測到

目前我已將所有項目顯示爲「正在加載...」,然後在請求完成時逐漸取代。

由於瀏覽器的限制,其中只有大約五個實際上是加載在任何給定的時間,其他人被阻止,直到早些完成。

我想知道是否有任何方法查明塊何時結束以及實際發送請求。使用onreadystatechange檢測比4其他readyState

初步測試並不樂觀 - 不會觸發事件,直到它的完成,在這一點上,我得到234緊接着連續(請注意,測試,Ajax響應是人爲推遲usleep ing隨機時間)

任何想法?或者,我是唯一真正的選擇手動實現阻塞部分?

+0

你的意思是它是瀏覽器做阻塞;你向野外投擲10個請求,瀏覽器將只允許其中5個並行調用,其餘都被擱置。如果您沒有得到任何相關答案,您可能需要自己創建一個隊列,以便您可以在適當的時候開始請求。作爲最後的解決方案。 – Gimby

+0

您可以驗證(通過您的網絡監視器)答覆是否實際上被延遲到足以使每個'readyState'轉換不同? – svidgen

+0

@svidgen:我已經通過一個6秒睡眠的ajax目標測試了這一點。如2,3,4在6秒後連續觸發。這是[演示小提琴](http://jsfiddle.net/2nWCq/)。 – mithunsatheesh

回答

-3

你可以使用jQuery函數來調用AJAX request.It是更好地發送多個並行的請求和響應,一旦得到..

+2

不可能的,因爲它似乎認爲,在jQuery中編寫代碼並沒有讓魔術般地讓瀏覽器處理更多的同時發生的請求,也沒有告訴我什麼時候請求停止了攔截並開始運行。我知道,對吧?誰會認爲jQuery與普通的JavaScript共享相同的限制... –

2

這其實你可以得到最好的近似來監視readyState的「1 「..這表示服務器連接已建立。這會給你一個很接近的估計,以確定連接何時實際上運行。

我砍了http://jsfiddle.net/r0gknr3w/。只要看JS控制檯,你會看到「1」記錄。你說你從來沒有看到readyState 1,但它絕對是。

var xhr = $.ajax({ 
    url: "/echo/html", 
    xhr: function() { 
     var xhr = new XMLHttpRequest(); 
     xhr.onreadystatechange = function() { 
      console.log(xhr.readyState); 
     } 
     return xhr; 

    } 
}); 
+0

嗯,有趣...我只得到'1'記錄...我得到它兩次。當我運行我的測試時,我確實看到只在IE中出現「1」,Chrome完全跳過了它。另外,當響應延遲時,在IE中立即記錄'1',緊接着是鎖等待,然後是'234'。 –

+0

我每次都看到「1,2,4」。 – joeltine