让jquery ajax(php)脚本一个接一个地运行而不是同时运行

时间:2010-09-20 22:21:07

标签: php javascript jquery

这是代码 - 一旦加载文档就会运行(在$(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功能吗?

2 个答案:

答案 0 :(得分:2)

async来电的选项中将false设为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);

        }
    });

}

答案 1 :(得分: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;

    });

这就是我正在使用的满足我需求的东西。有人看到任何瑕疵吗?