Как я могу узнать, какой Javascript вызывает Ajax-запрос? - PullRequest
7 голосов
/ 28 декабря 2010

У меня проблема с приложением Java JSF: в определенном случае действие пользователя вызывает HTTP-запрос Ajax, который корректно обновляет пользовательский интерфейс, но затем сразу же запускается второй запрос, вызывающий второе, неправильное обновление.

Как я могу узнать (желательно с помощью Firebug), где именно этот второй запрос запущен? Существует много минимизированного JS-кода для фреймворка, поэтому я не знаю, где размещать точки останова. Установка обработчика формы onsubmit на console.trace не помогла, я полагаю, потому что это независимые запросы Ajax.

Ответы [ 5 ]

5 голосов
/ 28 декабря 2010

Испытывая предложения в ответах, я обнаружил, что Firebug уже имеет именно то, что мне нужно, из коробки: вкладка Console отображает все запросы, а для запросов Ajax показывает номер файла и строки, из которых они происходят, что говорит мне, где установить точку останова ...

0 голосов
/ 28 декабря 2010

Возможно, это поможет, вызывающий является методом в объекте Function javascript.

console.log (arguments.callee.caller.toString ());

0 голосов
/ 28 декабря 2010

Если инфраструктура абстрагирует запросы AJAX, вы должны иметь возможность отслеживать вызовы абстракций. Например, jQuery позволяет это через глобальные обработчики событий AJAX .

Другой, более надежный способ решения этой проблемы - заменить объект XHR и отследить вызовы, сделанные к нему (т. Е. Если инфраструктура не предоставляет вышеуказанную абстракцию или если вызовы, которые вы хотите используйте не используйте абстракцию). Просто замените GM_log на console.trace в скрипте в конце страницы и включите его в тестируемую страницу.

0 голосов
/ 28 декабря 2010

В этих случаях я лично использовал HTTP-прокси, который может поставить запрос или ответ «на удержание». Например. Burp Proxy (на самом деле это инструмент безопасности, но он отлично подходит для отладки)

Запустите прокси и настройте ваш браузер на его использование. Перейдите на страницу, откуда поступают запросы roque, и активируйте перехватывающие запросы (это может потребовать некоторой практики, поскольку Burp Proxy может быть довольно сложным инструментом).

Теперь выполните действие пользователя, если все идет хорошо, прокси-сервер перехватывает его и ожидает вашего подтверждения, чтобы оно прошло. Сделай это. Тогда вы, вероятно, увидите, что второй запрос также перехватывается прокси-сервером. Не позволяйте этому пройти, вместо этого переключитесь на Firebug и приостановите работу в отладчике. Надеюсь, тогда вы сможете увидеть, откуда это происходит. Редактировать: если подумать, асинхронный характер AJAX, вероятно, означает, что вы все равно не сможете увидеть точное место с помощью этого метода ...: (*

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

0 голосов
/ 28 декабря 2010

Используя Firebug, вы можете установить Точки останова для событий мутации DOM (HTML) , если у вас есть некоторые изменения HTML в вашем обновлении пользовательского интерфейса.

...