javascript - 多个 AJAX 调用调用相同的成功函数不起作用

标签 javascript ajax

我对下面显示的 AJAX 调用的行为有疑问,我不明白。

var checkBoxes = document.getElementsByName("newInclCheckBox");
for(var i = 0; i<checkBoxes.length; i++
{
  if(checkBoxes[i].checked)
  {
    var name2 = getTabKeyFromDescription(checkBoxes[i].value);
    var tablenr2 = checkBoxes[i].getAttribute("data-tablenr");
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function()
    {
      if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
      {

        document.getElementById('newIncl_LogBox').innerHTML += xmlhttp.responseText;

      }
    }
    xmlhttp.open("GET", "../PHPScripts/getInclusions.php?q=add&name1=" + name1 + "&tablenr1=" + tablenr1 + "&name2=" + name2 + "&tablenr2=" + tablenr2, true);
    xmlhttp.send();
  }
}

如您所见,AJAX 调用位于 for 循环内,并在循环 checkBoxes 时被调用多次。

PHP-Skript getInclusions.php 成功完成每个请求,但不知何故,只有最后一个 xmlhttp.responseText 写入我的 LogBox 中。

如果我写了,我会理解这种行为

document.getElementById('newIncl_LogBox').innerHTML = xmlhttp.responseText;

(不带 += 运算符)。

为什么日志框中的内容与预期不符?非常感谢任何帮助!

最佳答案

您可以在for循环中同步调用ajax,然后它会像往常一样在您的代码中逐一执行并使用此代码。

这是同步ajax调用示例。

urllink="../PHPScripts/getInclusions.php?q=add&name1=" + name1 + "&tablenr1=" + tablenr1 + "&name2=" + name2 + "&tablenr2=" + tablenr2;

$.ajax({
    async: "false",
        type: "GET",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        url: urllink,
        success: function(jsonData) {
            alert("jsonData =" + jsonData);
            return jsonData;
        }
    });  

关于javascript - 多个 AJAX 调用调用相同的成功函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20197743/

相关文章:

javascript - 如何以递归方式使用JS回调?

javascript - 使用 jQuery、Ajax 和 PHP 的动态相关选择框

javascript - 如果在特定单词之前存在字符加空格,则不匹配

javascript - 使用 moment.js 从时区偏移转换为本地时间

javascript - 如何在不重新加载页面的情况下使用ajax发送数据? ( Node )

ajax - Paypal 循环计费的退款交易

javascript - 更新 NGRX/Redux 存储中数组中对象的属性不起作用

javascript - 用于验证三个字母数字条件的正则表达式

javascript - 如何用jquery检测哪个选择发生变化

javascript - 如何阻止 IE 缓存我的 XHR