首页 > 解决方案 > 无法设置 fetch() 之外的变量的 innerHTML

问题描述

我正在querySelectorAll使用循环匹配for(),当前匹配称为meta[i]。在for()函数内部,我fetch()用来从另一个页面获取一些信息。问题是,显然,我无法在函数内部设置meta[i]的innerHTML。这是我的代码:fetch()

function variations() {
  var meta = item.querySelectorAll('.meta_items tr td:nth-child(1)'), i;
  var id = 1;
  for (i = 0; i < meta.length; ++i) {
    meta[i].querySelector('input').setAttribute('type', 'hidden');
    meta[i].querySelector('input').value = id;
    fetch('../public/orders.php?id=' + id).then((resp) => resp.text()).then(function(data) {
      meta[i].innerHTML = data;
    });
  }
}

这是我得到的错误:

未捕获(承诺)类型错误:无法在 test.js:8 中设置 undefined 的属性“innerHTML”

标签: javascriptajax

解决方案


functionfor循环会添加一些 AJAX 调用,当它们被应答时,它们的回调会被调用。但是,当他们的回调被调用时,i由于你的 for ,你的函数范围已经超出了界限。一个非常简单的修复方法如下:

function variations() {
  var meta = item.querySelectorAll('.meta_items tr td:nth-child(1)');
  var id = 1;
  for (let i = 0; i < meta.length; ++i) {
    meta[i].querySelector('input').setAttribute('type', 'hidden');
    meta[i].querySelector('input').value = id;
    fetch('../public/orders.php?id=' + id).then((resp) => resp.text()).then(function(data) {
      meta[i].innerHTML = data;
    });
  }
}

我没有改变你定义你的id. 所有请求及其回调都具有 id = 1 的权利吗?


推荐阅读