Выяснение, когда запрос XMLHttpRequest был сделан без обратных вызовов - PullRequest
6 голосов
/ 13 февраля 2010

Я пытаюсь перегрузить метод XMLHttpRequest. * В JavaScript, чтобы веб-страница могла выяснить, был ли выполнен запрос Ajax без использования навязчивых обратных вызовов. Теперь что-то вроде этого работает относительно хорошо при использовании большинства JS-фреймворков:

XMLHttpRequest.prototype.getResponseHeader = function() {
 alert('O hai, looks like you made an AJAX request.');
}

Однако есть два улова:

  • getResponseHeader больше нельзя использовать как getResponseHeader .
  • Это не работает в простых примерах AJAX. т.е. xmlhttp.open("GET","simple.html",false);

Есть ли способ, которым JS может отразить XMLHttpRequest.open(), или любой способ, которым я могу связать что-то с ним. Я испробовал миллион парадигм (фабрика, клонирование, упаковка - большинство из них приводит к бесконечной рекурсии), и, похоже, ничего не работает. Может быть, это просто невозможно. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 13 февраля 2010

Вы можете сохранить ссылку на оригинал в некоторой переменной, прежде чем переопределить метод, а затем вызвать эту переменную в переопределенной функции:

var temp = XMLHttpRequest.getResponseHeader;
XMLHttpRequest.getResponseHeader = function() { temp.apply(this, arguments); };

Это должно позволить вам отслеживать использование без ущерба для функций, предоставляемых исходной функцией.

0 голосов
/ 13 февраля 2010

XmlHttp будет реальной проблемой, это объект COM и не поддерживает тот тип манипулирования прототипом, который вы хотите использовать. Хуже того, JQuery избегает XmlHttpRequest в IE, даже когда он доступен, вместо него используется XmlHttp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...