2010-09-20 68 views
1

这是代码 - 只要文档被加载就运行(在$(document).ready(function(){)之内)是否存在我们希望在页面上创建更多的ajax调用,但是直到所有的排队调用都完成后才会执行,如果每个调用都会在其他被执行,这将给新的Ajax调用一个机会去的下一个脚本欧洲工商管理学院前在所有30任何意见将不胜感激结束让jquery ajax(php)脚本一个接一个地运行,而不是同时运行

for (var x=0;x<=30;x++) 
{ 
emailnumber = '<?php echo $storage->countMessages(); ?>'-x; 
dataString='emailnumber='+emailnumber+'&url=<?php echo $url; ?>&email=<?php echo $email_address; ?>'; 

    $.ajax({ 

     type: "POST", 

    url: "phpdocument.php", 

    data: dataString, 

    success: function(msg){ 

      $('#results').append(msg); 

     } 

    }); 


} 

编辑:我应该使用setTimeout函数在某处?

+0

也许我可以保持async为true,并放入一些JavaScript,每次通过通过时都会导致4秒的延迟?每个脚本需要2-4秒才能执行。 – 2010-09-20 22:40:49

+0

我决定创建一个运行的函数 - 当ajax查询成功完成时,它将调用下一个函数。 – 2010-09-20 22:57:21

回答

2

设置为asyncfalse在您的ajax()调用的选项。但是,知道这一点:同步的Ajax请求可能会锁定浏览器。这是因为Ajax请求会暂停执行直到完成。换句话说,在完成所有Ajax请求之前,您将不会退出for循环。

for (var x = 0; x <= 30; x++) { 
    emailnumber = '<?php echo $storage->countMessages(); ?>' - x; 
    dataString = 'emailnumber=' + emailnumber + '&url=<?php echo $url; ?>&email=<?php echo $email_address; ?>'; 

    $.ajax({ 

     type: "POST", 
     async: false, 
     url: "phpdocument.php", 

     data: dataString, 

     success: function(msg) { 

      $('#results').append(msg); 

     } 
    }); 

} 
+0

我该如何做到这一点,以便它不会锁定,并且新的查询会进入队列的前端?当没有关闭异步时,有没有一种方法可以减慢速度?也许我不应该使用循环? - 也许它应该调用一个PHP文件,应该调用另一个Ajax的PHP调用? – 2010-09-20 22:34:36

+0

您可以在第一个ajax请求中从成功函数发出第二个ajax请求。 'success:function(){secondAjaxFunction();}' – calvinf 2010-09-20 23:16:54

+0

它不会锁定的唯一方法是使用“异步”模式。 JavaScript在单个线程上执行,但“异步”请求除外。 – 2010-09-21 00:03:54

0
FindEmail('<?php echo $storage->countMessages(); ?>'); 


    $(".unsubscribe_button").live("click", function(event){ 

     var thetd = $(this).parents(".unsubscribe_td"); 

     thetd.empty().append('"loading image url here" alt="" />'); 
     var senderemail = thetd.prev().html(); 
     var emailid = $(this).attr('id'); 
     var dataString='email=<?php echo $_SESSION[email_address]; ?>&emailid='+emailid; 
     $.ajax({ 

      type: "POST", 

      url: "php script location", 

      data: dataString,  

      success: function(msg){ 

       thetd.empty(); 
       thetd.append('success image url here'); 

     } 

     }); 
     return false; 

    }); 

下面是我用什么能满足我的需求。任何人都看到这个缺陷?