簡體   English   中英

多個ajax同時請求

[英]Multiple ajax requests at the same time

我有一個經過驗證的表單,然后使用以下處理程序提交:

submitHandler:function (form) {


    $.ajax({
        url: 'long_process.php',
        type: 'POST',
        data: $(form).serialize(),
        success: function (result) {
            // ... Redirect ...
        }
    });


    //start polling
    (function poll() {
        setTimeout(function () {
            $.ajax({
                url: "get_progress.php",
                success: function (data) {

                    console.log(data);
                    //Setup the next poll recursively
                    poll();
                },
            });
        }, 3000);
    })();


}

long_process.php需要大約30秒才能完成,同時我想通過get_progress.php來跟蹤進度,它回顯了處理完成的百分比。

啟動此腳本時,我進入控制台(已編輯)

1 POST long_process.php
2 GET get_process.php (3 seconds later)...
...stuck here until long_process.php finishes THEN 
3 GET get_process.php (3 seconds later)...
4 GET get_process.php (3 seconds later)...
...

但沒有任何的get_progress.php直到返回任何值long_process.php完成。

如何實現多個同時的ajax請求? 最終,這將用於顯示進度條。

如果您在PHP中使用會話,則一次調用將阻止另一次調用,因為PHP將不允許兩個請求同時使用相同的會話空間。 您的兩個請求可能正在觸發,但是在服務器完成第一個請求之前,您沒有收到第二個請求。

要解決這個問題:

選項1:不要在您調用的第一個腳本中使用會話,或者如果必須,請使用session_write_close()解鎖會話。 當然,在調用它之后,您無法編寫任何會話變量。

選項2:如果讀取和寫入會話變量是必要的,那么不要在第二個AJAX調用中使用會話變量,也不要聲明會話啟動。 讓你的第一個腳本將其狀態放在其他地方供你閱讀(在DB中,/ tmp上的文件),然后讓第二個腳本從那里讀取狀態。

希望有所幫助!

暫無
暫無

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

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