我有一個AJAX的問題:Ajax請求不是異步
foreach(ids as id){
$.ajax({
url:'script.php',
data:'id='+id,
cache:false,
});
}
如果我循環6次(在我的foreach循環),我應該有6個異步請求正在對服務器進行。但在這種情況下,ajax調用是同步調用的,而不是異步的。任何人都知道爲什麼會發生這種情況?
我有一個AJAX的問題:Ajax請求不是異步
foreach(ids as id){
$.ajax({
url:'script.php',
data:'id='+id,
cache:false,
});
}
如果我循環6次(在我的foreach循環),我應該有6個異步請求正在對服務器進行。但在這種情況下,ajax調用是同步調用的,而不是異步的。任何人都知道爲什麼會發生這種情況?
好,謝謝。分析和反映的幾個小時後,我才明白爲什麼這個劇本要syncronsly:我打開script.php的文件,我注意到這一點,該文件的beginig:
<?php
session_start();
$var1=$_SESSION['SOMEVAR'];
.......
//do php script.....
.......
?>
所以我有平行AJAX調用PHP腳本使用會話,但在這種情況下,會話鎖定將要執行的會話瓦爾請求syncrosnly事業的調用,所以這個問題的解決方法是:
<?php
session_start();
$var1=$_SESSION['SOMEVAR'];
//get all session var
......
session_write_close();//then close it
.......
//do php script.....
.......
?>
隨着session_write_close我有我的腳本,以在Ajax調用異步的方式。一個很好的解釋這裏http://konrness.com/php5/how-to-prevent-blocking-php-requests/
爲什麼不將所有的ID的腳本,然後循環它們是連接速度更快更準確..
的Javascript:
// you can send the whole array in once i think not for sure
$.ajax({
url:'script.php',
type: 'POST',
data: ids,
cache:false,
success:function(msg)
{
// when done
}
});
的script.php:
foreach($_POST as $id)
{
[............] // do your thing
}
你試過將async參數設置爲true?
foreach(ids as id)
{
$.ajax({
url:'script.php',
async: true,
data:'id='+id,
cache:false,
});
}
您如何確認呼叫是同步的而不是異步的?
<?php
session_start();
$var1=$_SESSION['SOMEVAR'];
//get all session var
......
session_write_close();//then close it
.......
//do php script.....
.......
?>
這是真棒,它解決了我的問題一樣albanx,感謝
我已經運行在控制檯這個代碼,我有6個併發的請求: 爲(VAR I = 0; i <6; i ++){.ajax {{url:'script.php', data:'id ='+ i, cache:false, }); } – Lordalcol 2011-02-04 16:20:25
使用IE?它一次只允許兩個連接。無論如何,JS無法在IE中進行線程化...您是否在其他瀏覽器中嘗試了這一點? – Sean 2011-02-04 16:23:09
@Sean,IE瀏覽器已經支持異步Ajax調用IE以來5之前那麼其他任何瀏覽器甚至有支持或知道的東西稱爲AJAX – 2011-02-04 16:33:27