[英]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.