Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax请求不是异步的_Ajax - Fatal编程技术网

Ajax请求不是异步的

Ajax请求不是异步的,ajax,Ajax,我有一个ajax问题: foreach(ids as id){ $.ajax({ url:'script.php', data:'id='+id, cache:false, }); } 如果我循环6次(在我的foreach循环中),我应该向服务器发出6个异步请求。但是本例中的ajax调用是同步调用,而不是异步调用。有人知道为什么会发生这种情况吗?为什么不将所有id发送到脚本,然后循环它们会更快更准确 Javascript: // you can send the

我有一个ajax问题:

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

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

为什么不将所有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,
  });
}

您如何确认这些调用是同步的而不是异步的

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

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

.......
?>

因此,我对使用session的php脚本进行了并行ajax调用,但在本例中,sessions锁定了要同步执行的调用,这仅仅是因为session vars请求,所以这个问题的解决方案是:

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

.......
?>

在session\u write\u关闭时,我有了脚本以异步方式进行ajax调用。这里有一个很好的解释



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

我在控制台中运行了这段代码,我有6个并发请求:for(var i=0;i使用IE?它一次只允许两个连接。而且JS在IE中没有线程化…你在其他浏览器中尝试过这个吗?@Sean,IE从IE 5开始就支持异步AJAX调用。在其他浏览器支持或知道任何调用之前AJAX@Shiv库马尔,我知道它支持“异步”但是它在幕后使用activex魔术使其异步。Javascript在IE中不是传统意义上的线程。@Sean就运营问题而言,IE是异步的,不是吗(进行AJAX调用)?那么你的评论就没有意义了(至少就这个问题而言。此外,由于IE7 XMLHTtpRequests不是使用ActiveX实现的。不,我不能这样做,因为每个请求都必须是独立的。你可以关注本教程,这里可能有一些东西可以帮助你:这是一个乞丐指南,通常我会按照你的建议何时提出多个请求est与ajax合二为一,但在这种情况下,我需要并行请求。我尝试过这种方法,但没有任何改变,事实上请求是异步的,但响应是同步的。请看我的解决方案答案很棒!thanx。我很困惑。我想我必须使用多任务来完成这项任务。。
<?php
session_start();
$var1=$_SESSION['SOMEVAR'];
//get all session var
......
session_write_close();//then close it
.......
//do php script.....

.......
?>