2011-02-04 155 views
3

我有一個AJAX的問題:Ajax請求不是異步

foreach(ids as id){ 
    $.ajax({ 
    url:'script.php', 
    data:'id='+id, 
    cache:false, 
    }); 
} 

如果我循環6次(在我的foreach循環),我應該有6個異步請求正在對服務器進行。但在這種情況下,ajax調用是同步調用的,而不是異步的。任何人都知道爲什麼會發生這種情況?

+0

我已經運行在控制檯這個代碼,我有6個併發的請求: 爲(VAR I = 0; i <6; i ++){.ajax {{url:'script.php', data:'id ='+ i, cache:false, }); } – Lordalcol 2011-02-04 16:20:25

+0

使用IE?它一次只允許兩個連接。無論如何,JS無法在IE中進行線程化...您是否在其他瀏覽器中嘗試了這一點? – Sean 2011-02-04 16:23:09

+0

@Sean,IE瀏覽器已經支持異步Ajax調用IE以來5之前那麼其他任何瀏覽器甚至有支持或知道的東西稱爲AJAX – 2011-02-04 16:33:27

回答

8

好,謝謝。分析和反映的幾個小時後,我才明白爲什麼這個劇本要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/

1

爲什麼不將所有的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 
} 
1

你試過將async參數設置爲true?

foreach(ids as id) 
{ 
    $.ajax({ 
    url:'script.php', 
    async: true, 
    data:'id='+id, 
    cache:false, 
    }); 
} 

您如何確認呼叫是同步的而不是異步的?

1
<?php 
session_start(); 
$var1=$_SESSION['SOMEVAR']; 
//get all session var 
...... 
session_write_close();//then close it 
....... 
//do php script..... 

....... 
?> 

這是真棒,它解決了我的問題一樣albanx,感謝