Ajax请求不是异步的

时间:2011-02-04 16:15:17

标签: ajax

我有一个ajax问题:

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

如果我循环6次(在我的foreach循环中),我应该向服务器发出6个异步请求。但是在这种情况下,ajax调用是同步调用的,而不是异步调用的。任何人都知道为什么会这样?

4 个答案:

答案 0 :(得分:9)

好的谢谢。经过几个小时的分析和反思,我意识到为什么这个脚本同步:我打开script.php文件,我注意到这个和文件的开头:

<?php
session_start();
$var1=$_SESSION['SOMEVAR'];
.......
//do php script.....

.......
?>

所以我对使用会话的php脚本进行了并行ajax调用,但是这种情况下的会话锁定了同步执行会话变量请求的调用,因此解决这个问题的方法是:

<?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 :(得分: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
}

答案 2 :(得分:1)

您是否尝试过将async参数设置为true?

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

您如何确认呼叫是同步的而不是异步的?

答案 3 :(得分:1)

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

.......
?>

这太棒了,它解决了我的问题和albanx一样,谢谢