当我的代码运行并应该在 Ajax 加载中编辑 DOM 元素时,它不起作用并给出错误:TypeError: Cannot set property 'innerHTML' of null。
我已经检查了几乎所有内容,并且我相信我没有在类名或任何内容上犯错误。
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Ajax Crash Course</title>
</head>
<body>
<button class="userBtn">Click for User</button>
<br>
<br>
<div class="DOMInsertions"></div>
<script src="ajax2.js"></script>
</body>
</html>
JavaScript:
const userBtn = document.querySelector('.userBtn');
let listNum = 0;
userBtn.addEventListener('click', userCall);
function userCall() {
const xhr = new XMLHttpRequest;
xhr.open('GET', 'user.json', true);
xhr.onload = function() {
if( xhr.status === 200 ){
let user = JSON.parse(this.responseText);
let { name, id, email } = user;
let className = `userList_${listNum}`;
textToDOM('h1', 'User:', 'heading');
textToDOM('ul', 'Yo', className)
let list = document.querySelector(className)
list.innerHTML = `
<li>ID: ${id} </li>
<li>Name: ${name} </li>
<li>Email: ${email}</li>
`
listNum++;
}
}
xhr.send();
}
最佳答案
好吧,我实际上已经重建了脚本并发现了一些问题:
DOMInsert 定义不明确。您可以通过向注入(inject)容器添加 ID 并通过 ID 引用它来解决此问题:
<div class="DOMInsertions" id="dominsert"></div>
然后使用这个:
document.getElementById('dominsert').appendChild(addition);
第二个问题是你的 className 没有定义。因此,您的“列表”是未定义的。
关于javascript - Ajax 的 JS 错误 : TypeError: Cannot set property 'innerHTML' of null (not a duplicate, 其他答案均无效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57277443/