2011-02-04 199 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,感谢