【问题标题】:Have jquery ajax (php) scripts run one after another instead of at the same time让 jquery ajax (php) 脚本一个接一个地运行,而不是同时运行
【发布时间】:2010-09-20 22:21:06
【问题描述】:

这是代码 - 一旦加载文档就会运行(在 $(document).ready(function(){ 内)有没有办法对此进行编码,以便下一个 ajax 查询将在当前查询之后运行完成了吗?我想在页面上创建更多的 ajax 调用,但是在所有排队的调用完成之前它们不会执行。如果每个调用都在另一个调用执行之后运行,这将使新的 ajax 调用有机会到达前面下一个脚本在所有 30 的末尾。任何建议将不胜感激。

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 函数吗?

【问题讨论】:

  • 也许我可以将 async 保持为 true 并放入一些 javascript,每次通过时会导致 4 秒延迟?每个脚本需要 2-4 秒来执行。
  • 我决定创建一个运行的函数——当ajax查询成功完成后,它会调用下一个函数。

标签: php javascript jquery


【解决方案1】:

ajax() 呼叫的选项中将async 设置为false。但是,要知道:同步 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);

        }
    });

}

【讨论】:

  • 我怎样才能让它不会被锁定并且新的查询会排在队列的前面?当每个人都没有关闭异步时,有没有办法放慢速度?也许我不应该使用循环? - 也许它应该调用一个 php 文档,它应该调用另一个 ajax php 调用?
  • 您可以在第一个 ajax 请求中从成功函数发出第二个 ajax 请求。 success: function() {secondAjaxFunction();}
  • 唯一不会锁定的方法是使用asynchronous 模式。 JavaScript 在单个线程上执行,asynchronous 请求除外。
【解决方案2】:
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;

    });

这是我正在使用的满足我需求的东西。任何人都认为这有任何缺陷吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多