在進行 setInterval
調用之前,所有一切看上去都工作得不錯。這個調用將設置監視請求狀態的計時器,然後使用下載的資源設置頁面內容。
我將展示一個更好的解決方案,用來計算出什麼時候請求能夠完成。同時,清單 2 展示了頁面正在請求的文件。
<b>Hello there</b>
同時 圖 1 顯示了在我的浏覽器中看到的頁面。
所以,您可能會問自己,“它現在可以工作,不是嗎?如果沒有出現故障的話,為什麼要修復呢?” 實際上已經出現故障了,因為程序運行得非常慢。計時器將時間間隔設置為 1 秒,隨著時間的流逝,請求完全超過了時間間隔。所以,您將看到頁面首先出現一個空的框,然後再等待一秒鐘,忽然出現大量的內容。多麼糟糕!
如何解決呢?AJax 天生就是異步的。難道不需要進行輪詢循環就能查看何時完成請求嗎?
結果證明,並非如此。正如我在 清單 3 中展示的一樣,XMLHTTPRequest
對象所提供的全部內容是一個名為 onreadystatechange
的回調機制。(多麼好聽的名字,讓人想起了 VAX PDP/11s)。