[英]How to load an ajax (jquery) request response progressively without waiting for it to finish?
我想制作一個將使用jquery將一個關鍵字列表提交到php文件的表單,這個文件可能需要花費很多時間來加載,具體取決於關鍵字列表的大小。
我想要做的是在不使用iframe的情況下將php響應實時加載到div或容器中。
我知道的所有ajax請求必須等到請求完成才能訪問響應,我需要訪問該響應,即使它還沒有完成,所以我可以實時更新進度。
確實有一種方法。 使用普通的舊xmlhttpobjects,我監視了readyState。 就緒狀態4表示請求已結束。 就緒狀態3意味着我可以獲得一些輸出並等待更多:
request.onreadystatechange=function()
{
switch(request.readyState)
{
case 4:
console.log("all good things come to an end");
break;
case 3:
console.log("o, hai!" + request.responseText);
break;
}
}
我相信你可以使用jQuery實現相同的目標: jQuery:req.readyState == 3可能嗎?
最近Josh發布了關於COMET技術的文章,這似乎適合你。 php中有幾個有趣的鏈接示例。
更新:使用Ajax的最可靠方法是將每個Ajax請求視為原子的:它可以工作,也可以不工作。
並且您(在頁面上運行的JS)在您的請求執行時並沒有真正獲得任何反饋。 所以你需要多次通話。 不過要小心! 每次呼叫的大量開銷和大多數瀏覽器一次只能執行一個或兩個。
我建議對人類使用繁忙的指標。 您還可以顯示每秒至少更新兩次的倒計時時鍾,以使其看起來像正在發生的事情。
添加:
您可能還想重新構建解決方案。 例如,通過提交請求將更新過程視為Ajax啟動的批處理作業。 然后進行進一步的Ajax調用以學習(然后)向人類顯示批處理作業的進度。
彗星和其他“保持管道開放策略”可以使用但很難可靠地工作並傾向於使用大量資源。 更多的步行輪詢技術可以更容易上手。 然后根據需要進行優化
聽起來你需要使用多個較小的請求而不是一個大的請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.