【发布时间】:2017-09-29 22:13:57
【问题描述】:
我需要使用 ajax 从我的数据库中获取一些数据。我正在使用 Node JS 和 Express 来处理路由。 这是后端代码:
router.get('/isAuth', ensureLoggedIn, (req, res) => {
Permit.find({}).populate('authBy').exec()
.then(permits => res.jsonp(permits))
.catch(err => res.send(err));
});
这是客户端: const allPermits = document.getElementById('allPermits'), table = document.querySelector('table tbody');
allPermits.addEventListener('click', getData);
function getData() {
let xhr = new XMLHttpRequest();
xhr.open('get', '/permits/isAuth', true);
xhr.onload = () => {
if (this.status == 200) {
let permitData = this.responseText;
let responseData = '';
permitData.forEach((permit) => {
responseData +=
`<tr class="dataRow">
<td>${permit.name}</td>
<td>${permit.destination}</td>
<td>${permit.fromD}</td>
<td>${permit.toD}</td>
<td>${permit.notes}</td>
<td>
<button class="deletePermit" data-id="${permit._id}"><i class="fa fa-trash"></i></button>
</td>
</tr>`;
})
table.innerHTML = responseData;
}
}
xhr.send();
}
问题是这条线不起作用:table.innerHTML = responseData;。
我也尝试过console.log(responseData),但除了ajax 请求的成功消息之外,我什么也没看到-https://image.prntscr.com/image/6Otihd6jSMWPRdoz4y6y9g.png;
谢谢!
【问题讨论】:
-
这里的“不起作用”到底是什么意思?
-
table的定义是什么? -
什么也没发生,我也尝试控制台记录 responseData,但在控制台中看不到任何内容。
-
我认为您的问题是您正在为
onload使用箭头函数。this.status不会引用您希望它引用的内容。请改用函数表达式。请参阅Arrow function vs function declaration / expressions: Are they equivalent / exchangeable? 了解原因。 -
是的,您在箭头函数中使用了
this,但您应该使用正确的函数表达式。
标签: javascript ajax