【问题标题】:What's wrong with this ajax request?这个ajax请求有什么问题?
【发布时间】: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


【解决方案1】:

因为你使用的是箭头函数,onload 方法中的this 不会引用请求对象,所以this.status === 200 永远不会 是真的。请改用函数表达式。

有关详细信息,请参阅

【讨论】:

  • 说得好,确实。我一直在阅读代码并错过了this :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 2014-06-05
  • 2019-01-21
相关资源
最近更新 更多