php - Ajax 不在循环中工作

标签 php javascript html ajax request

<分区>

我想在一个循环中执行 Ajax 来逐个获取数据。我在我的 javascript 函数中做了类似的事情。

var resultType = $("input[name='resultType']:checked").val();
var finalResult = "";
var loadingMessage = "<img src=\"./results/loader.gif\" alt=\"Loading...\"/><br/>This may take several minutes...";
var htmlMessage=loadingMessage;

$("#result").html(htmlMessage);

for(var i=1;i<5;i++){
    $.ajax({
        type: "GET",
        url: "results/result_html.php?usn="+i+"&resultType="+resultType,
        dataType:"JSON",
        success:function(result){
            finalResult+=result;
            result=result+htmlMessage;
            $("#info").hide();
            $("#result").html(result);              
            $("#usn").attr("placeholder", "Class USN");
        }
    });
}

但它并没有像我预期的那样执行。如果我删除 for 循环并直接给值,那么一切都是正确的。我不太熟悉 Ajax。请问有人可以帮助我吗?

最佳答案

您正在处理闭包的常见问题。当您的 ajax 请求被执行时,计数器“i”已经并且始终处于它的最后一个值 (4)。

你必须为那个计数器创建一个新的范围,这样它就不会发生; 你可以通过两种方式做到这一点:

简单的方法:

for(var i=1;i<5;i++){
    var counter = i;
    $.ajax({
        type: "GET",
        url: "results/result_html.php?usn="+counter+"&resultType="+resultType,
        dataType:"JSON",
        success:function(result){
            finalResult+=result;
            result=result+htmlMessage;
            $("#info").hide();
            $("#result").html(result);              
            $("#usn").attr("placeholder", "Class USN");
        }
    });
}

或者正确的方式:

for(var i=1;i<5;i++){
(function(counter){
    $.ajax({
        type: "GET",
        url: "results/result_html.php?usn="+"counter"+"&resultType="+resultType,
        dataType:"JSON",
        success:function(result){
            finalResult+=result;
            result=result+htmlMessage;
            $("#info").hide();
            $("#result").html(result);              
            $("#usn").attr("placeholder", "Class USN");
        }
    });
})(i);}

关于php - Ajax 不在循环中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15091810/

相关文章:

javascript - 反斜杠-单引号\'

javascript - JS 中的计时 - 多个 setIntervals 一次运行并同时启动?

javascript - 将 javascript 中的值引入单选按钮

javascript - 如何检测表单编辑以便仅在数据库上更新?

php - 遍历 POST 数组并更新数据库

javascript - 如何将 SSR 与 CSR 结合?

php - html 文件读取器 : convert blob to image file?

javascript - 是否可以在 css 或 javascript 中在最后一行(或作为边框)添加一系列点

php - 为什么 Symfony2 不捕获异常

php - 将多个图像连同 android 中的标签一起发送到服务器