Установите контрольную точку в XHR в Chrome

У меня есть страница, которая отправляет запрос XHR при отправке формы, и я хотел бы, чтобы Chrome сломался, когда он получил ответ. Похоже, что лучший способ добиться этого будет, если у Chrome есть функция javascript, которую я могу назвать нарушением исполнения, но пока я не смог найти что-либо подобное. Есть ли другое решение?

Edit

У меня на самом деле нет обратного вызова для запроса, поэтому я не могу установить точку останова таким образом. Запрос отправляется с этой строкой кода jquery:

$.post(this.action, $(this).serialize(), null, "script");

где this - элемент формы. Аргумент null - это то, где вы обычно определяете обратный вызов, но с аргументом "script", необработанный javascript возвращается сервером, а затем выполняется напрямую, поэтому, кажется, единственный способ сломать и выполнить код с помощью debugger;. Это работает, но когда вы переходите через код, вы не можете видеть, на какой строке вы находитесь, поэтому его немного неудобно. Я подозреваю, что это ограничение средств отладки Chrome.

Ответ 1

Вы можете просто установить контрольную точку в обратном вызове успеха и пройти через отладчик. Чтобы установить точку останова:

  • Откройте "Инструменты разработчика" и перейдите на вкладку "Сценарии" вверху.
  • Выберите script, который содержит обратный вызов успеха для вашего запроса AJAX.
  • Щелкните номер строки в левой части, где вы хотите точку останова. Появится синяя стрелка, указывающая, что точка останова установлена.
  • Затем сделайте запрос AJAX так, как вы бы, и отладчик автоматически остановится на заданной точке останова.

В качестве альтернативы вы можете использовать оператор debugger для автоматического вызова отладчика. Поэтому с этим ваш обратный вызов будет выглядеть так:

success: function(data, textStatus, request) {
    debugger; // pause execution and opens debugger at this point
    ...
}

Также проверьте этот хороший article для отладки JavaScript.

Однако первый подход лучше, так как он не требует изменения вашего кода.

Ответ 2

Вы также можете перейти на вкладку "Скрипты" в инструменте разработчика, а с правой стороны щелкните "Точки останова XHR" и добавьте новую точку останова с фильтрацией URL-адресов.

Если вы используете jQuery, при возникновении точки останова вы можете использовать CallStack, чтобы найти свою функцию, которая называется jQuery.ajax.

Ответ 3

снимите консоль хром (ctrl + shift + j) и введите любой из них:

Просто перепишите jquery ajax:

var prevajax = jQuery.ajax;
jQuery.ajax = function () { debugger; return prevajax.apply(jQuery, arguments); };

или если вы не используете jQuery, перепишите класс xhr:

var prevxhr = XMLHttpRequest;
XMLHttpRequest = function (){debugger; prevxhr.apply(this, arguments);};

После того, как он сломается, просто нажмите shift + f11, пока не найдете метод, который инициирует запрос ajax.