Запрос AJAX обращается к серверу со всех страниц, и я не могу найти источник этого исходного вызова AJAX - PullRequest
0 голосов
/ 30 декабря 2011

Где-то в моих тысячах строк javascript делается вызов ajax. Я не могу за свою жизнь понять, откуда это исходит. Кажется, это происходит сразу после загрузки страницы.

Я вижу в firebug, что выполняется вызов ajax. Вызов ajax всегда запрашивает текущую страницу. Так, например, когда users#new загружается, он запрашивает users#new.js, а также делает то же самое со всеми другими контроллерами и действиями.

Есть ли способ определить, откуда в коде он вызывается?

Ответы [ 3 ]

2 голосов
/ 31 декабря 2011

В вашей консоли JavaScript вы можете переопределить XMLHttpRequest.send() своей собственной реализацией и установить там точку останова, чтобы вы могли исследовать трассировку стека в отладчике при его вызове.

var send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function () {
    send.apply(this, arguments); // set break point here
};
1 голос
/ 31 декабря 2011

Хотя вы уже нашли решение, вы все равно можете исправить ситуацию, используя отладчик.Допустим, вы использовали jQuery и его помощники AJAX, просто установите точку останова в первой строке метода $.ajax.

Когда выполняется вызов $.ajax, среда выполненияостановится в точке останова, и вы можете посмотреть на стек вызовов, чтобы точно определить, откуда поступил вызов.

Если вы использовали конструктор XMLHttpRequest напрямую, а не через jQuery или какую-либо другую оболочку, то заменитеисходная функция конструктора XMLHttpRequest с фиктивной реализацией с целью отслеживания ее вызывающего.

function XMLHttpRequest() {
    this.open = function() {}; // ignore
    this.send = function() {
        debugger;
    };
}

Поместите точку останова или программно вызовите отладчик в методе отправки этой переопределенной реализации и всякий раз, когда кто-то пытаетсяСоздавая новый объект XMLHttpRequest и вызывая метод send, вы можете перехватить вызов и посмотреть трассировку вызова, чтобы выяснить, кто сделал вызов.

Существует множество хороших вариантов отладки, таких как Firebug дляFirefox или встроенные средства разработчика в Chrome и Safari.

0 голосов
/ 31 декабря 2011

В какой-то момент я переписал свою функцию настройки ajax.

$. Ajax! = $ .AjaxSetup, очевидно:)

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