簡體   English   中英

如何在不等待它完成的情況下逐步加載ajax(jquery)請求響應?

[英]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 / jQuery顯示打印?

更新:使用Ajax的最可靠方法是將每個Ajax請求視為原子的:它可以工作,也可以不工作。

並且您(在頁面上運行的JS)在您的請求執行時並沒有真正獲得任何反饋。 所以你需要多次通話。 不過要小心! 每次呼叫的大量開銷和大多數瀏覽器一次只能執行一個或兩個。

我建議對人類使用繁忙的指標。 您還可以顯示每秒至少更新兩次的倒計時時鍾,以使其看起來像正在發生的事情。

添加:

您可能還想重新構建解決方案。 例如,通過提交請求將更新過程視為Ajax啟動的批處理作業。 然后進行進一步的Ajax調用以學習(然后)向人類顯示批處理作業的進度。

彗星和其他“保持管道開放策略”可以使用但很難可靠地工作並傾向於使用大量資源。 更多的步行輪詢技術可以更容易上手。 然后根據需要進行優化

聽起來你需要使用多個較小的請求而不是一個大的請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM