javascript - 无法设置 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”
解决方案
您function
的for
循环会添加一些 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 的权利吗?
推荐阅读
- postgresql - 可以将外部服务器连接从 DB1 传递到 DB2 以使用该连接在 DB2 上运行查询吗?
- reactjs - 使用 Swiper 组件播放暂停问题反应原生多个视频
- css - 如何设置选择输入占位符的颜色?
- apache-spark - 使用 ForeachWriter 在 Spark 流中实现 Cassandra 接收器
- reflection - 如何在 Kotlin 中安全地投射反射类
- powershell - PowerShell 日志文件文件系统权限
- html - 溢出的原因是什么:滚动无法按预期工作?
- reactjs - 父状态更改后子级未更新
- javascript - 将组件名称从 HTML 传递给组件
- python - 使用 lmfit 拟合时如何指定 Y 变量的误差?