0

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 的新手,请任何人帮助我按预期运行。

4

3 回答 3

3

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

$(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")
                    }
                }
            });
    }

});});
于 2013-02-27T09:41:36.120 回答
1

你的代码很奇怪。为什么会走

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

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

于 2013-02-27T09:42:21.497 回答
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);
        }
    });
});

那应该可以解决您的问题。

于 2013-02-27T09:41:31.960 回答