javascript - 使用 AJAX 回调函数访问数组

标签 javascript php ajax

我正在尝试使用 AJAX 调用来更新页面上的一堆图像元素。要更新的元素列表保存在一个数组中,分配给每个图像的 URL 是通过 AJAX 从 PHP 页面检索的。

下面的代码不起作用,因为从 AJAX 调用中的回调函数调用时 imagesArray[i] 未定义 - 可能是由于 JavaScript 的异步特性。

var imagesArray = document.getElementsByClassName('swappableImages');

for (i = 0; i < imagesArray.length; i++) {
  var requestUrl = "http://example.com/getAnImageURL.php";

  getDataViaAJAX(requestUrl, function(data) {
    alert('img url=' + data.responseText);
    imagesArray[i].src = data.responseText;
  });
}

function getDataViaAJAX(url, callback) {
  var request = window.ActiveXObject ?
    new ActiveXObject('Microsoft.XMLHTTP') :
    new XMLHttpRequest;

  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      request.onreadystatechange = doNothing;
      callback(request, request.status);
    }
  };
  request.open('GET', url, true);
  request.send(null);
}

function doNothing() {}

在阅读周围的内容时,解决这个问题的一种方法似乎是使用闭包,但是闭包是我仍然无法理解的东西,我发现的例子有让我更加困惑。

那么,当 AJAX 函数返回时,如何更新数组中的每个元素?

<小时/>

请注意,已识别的“重复”问题是具有 jQuery 特定答案的问题的 jQuery 版本。我正在使用普通 JavaScript。

最佳答案

注意: 第一个示例/方法 - 在评论中引用 - 从答案中删除。

你可以试试这个:

var requestUrl = "http://example.com/getAnImageURL.php";

for (i = 0; i < imagesArray.length; i++) {
  (function(j) {
    getDataViaAJAX(requestUrl, function(data) {
      alert('img url=' + data.responseText);
      imagesArray[j].src = data.responseText;
    });
  })(i);
}

关于javascript - 使用 AJAX 回调函数访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40657682/

相关文章:

javascript - 从同一类的异步方法调用类内的异步方法时的 Promise(待定)

javascript - 更改 contenteditable 后恢复光标位置

javascript - 与 intro.js 相关的问题重点关注 HTML 表格格式

php - 在多列中显示列表项并限制行数

javascript - 理解javascript多维数组的问题

javascript - jQuery 在滚动时加载更多数据

javascript - 显示 href 悬停左侧的图像

javascript - 如何在 javascript/jQuery 中将字符串值评估为 bool 值?

PHP 引用和性能

jquery - iOS Safari - 无法从 null 发出任何请求