LINUX.ORG.RU

JavaScript: не могу получить содержимое поля обьекта

 , ,


0

1

Добрый вечер!

Пытаюсь тут добавить логгирование запросов с использованием XMLHttpRequest: переопределил его метод send()

function setXMLRequestCallback(callback) {
            let oldSend;

            XMLHttpRequest.callback = callback;
            oldSend = XMLHttpRequest.prototype.send;
            XMLHttpRequest.prototype.send = function () {
                oldSend.apply(this, arguments);
                XMLHttpRequest.callback({
                    status: this.status,
                    url: this.responseURL,
                    text: this.responseText,
                    object: this
                });
            }
        }

Заметил, что первые три поля обьекта передаваемого в callback имеют пустые значения, а поле object содержит тот самый XMLHttpRequest поля которого прекрасно просматриваются с использованием console.log().

Что я делаю не так?

а разве send не асинхронный? т.е. после вызова оригинального send ничего ж не поменяется сразу, а при изменении состояния приходит колбек onreadystatechange. Его и надо менять. Например так:

function setXMLRequestCallback(callback) {
  XMLHttpRequest.callback = callback;
  const oldSend = XMLHttpRequest.prototype.send;
  XMLHttpRequest.prototype.send = function () {
  const origCallback = this.onreadystatechange;
  this.onreadystatechange = () => {
    XMLHttpRequest.callback({
      status: this.status,
      url: this.responseURL,
      text: this.responseText,
      object: this
    });
  }
  oldSend.apply(this, arguments);
}
Goganchic ★★
()
Последнее исправление: Goganchic (всего исправлений: 1)
Ответ на: комментарий от Goganchic

Точно, спасибо!

Тут еще вычитал что у XMLHttpRequest появилось свойство onload. С ним тоже вышло.

shooter93 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.