Ajax程序没有像我预期的那样运行

时间:2013-02-27 09:38:51

标签: php javascript html ajax

Ajax程序没有像我预期的那样运行。见代码

$(document).ready(function(){
$("input").keyup(function() {
    for(var i=400;i<421;i++){
        (function(counter){
            counter=String(counter);
            $.ajax({
                type: "GET",
                url: "results/result_html.php?usn="+txt+counter+"&resultType="+resultType,
                dataType:"JSON",
                success:function(result){
                    $("#info").hide();
                    $("#result").html(result);              
                    $("#usn").attr("placeholder", "Class USN");
                }
            });
        })(i);
    }
    alert("hai");
});});

在这段代码中,我想在完成for循环中的所有Ajax请求后显示警告。但是,当我运行此代码时,警报首先显示。我是Ajax的新手,请任何人帮助我按照我的预期运行。

3 个答案:

答案 0 :(得分:3)

Ajax是异步的,这意味着它将继续并行运行代码。在Ajax请求完成后调用success函数。你能做的是:

$(document).ready(function(){
$("input").keyup(function() {
    var loopsToDo = 20, done=0;
    for(var i=400;i<421;i++){
            var counter=String(i);
            $.ajax({
                type: "GET",
                url: "results/result_html.php?usn="+txt+counter+"&resultType="+resultType,
                dataType:"JSON",
                success:function(result){
                    $("#info").hide();
                    $("#result").html(result);              
                    $("#usn").attr("placeholder", "Class USN");
                },
                complete : function(){
                    done++;
                    if( done == loopsToDo)
                    {
                        alert("DONE")
                    }
                }
            });
    }

});});

答案 1 :(得分:1)

你的代码很奇怪。为什么会这样?

for(var i=400;i<421;i++)

此外,警报将在任何Ajax调用之前首先显示,因为ajax是异步的,这意味着它单独运行到其余代码。由于您正在运行20个Ajax请求,因此警报不会等待所有20个请求完成。您需要做的是在成功部分中记录Ajax调用,当等于20时,显示警报。

答案 2 :(得分:0)

因为AJAX调用是异步的,所以它将设置AJAX调用,然后继续执行脚本。 'success'参数指定一旦收到响应就要使用的回调 - 这可能在任何时候发生(因此,异步)。

$(document).ready(function(){
    $("input").keyup(function() {
        for(var i=400;i<421;i++){
            (function(counter){
                counter=String(counter);
                $.ajax({
                    type: "GET",
                    url: "results/result_html.php?usn="+txt+counter+"&resultType="+resultType,
                    dataType:"JSON",
                    success:function(result){
                        $("#info").hide();
                        $("#result").html(result);              
                        $("#usn").attr("placeholder", "Class USN");
                        alert("hai");
                    }
                });
            })(i);
        }
    });
});

这应该可以解决你的问题。