我有一个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