Как получить статус ответа jQuery.ajax? - PullRequest
9 голосов
/ 02 августа 2011

Есть ли способ узнать, был ли возвращенный объект jqXHR перенаправлен из другого запроса?Например, имея следующий код:

   jQuery.ajax({
            type:       'POST',
            url:        'http://example.com/page.html',
            complete:   function(response, status) {
                        console.log(response.statusCode);
                        // do something
                        }
        });

Если URL-адрес ajax перенаправляется с кодом состояния 301 или 302, ответ будет результатом перенаправленной страницы и вернет статус 200 (ОК)код.Я думаю, что это ошибка jQuery (на самом деле не знаю, является ли это предполагаемым поведением, так как окончательный ответ был на самом деле успешным), я не могу также получить исходные заголовки ответа, чтобы проверить, существует ли заголовок местоположения, так как этодоступно только для перенаправленных запросов.

Firebug с указанным кодом регистрирует эти два запроса через XHR

http://example.com/page.html 302 (временно перемещено) http://example.com/redirect.html 200 (ОК)

Но jQuery возвращает данные только из второго запроса.

Может быть, есть способ получить данные из первого запроса?Или получить URL-адрес ответа и сравнить его с исходным запросом?

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Проблема в том, что 301 или 302 обрабатываются браузером напрямую из-за соответствия стандартам. Этот код состояния не передается на ваш вызов ajax. Единственный способ узнать, что вызов завершен, - это обработчик завершения, и, кроме того, в объекте jqxhr, переданном для завершения, отсутствует полезный статус. Обработчики успеха и ошибок никогда не будут вызываться.

У нас был некоторый устаревший код для размещения в рубине, который использовал перенаправление к методу get () при вызове метода post (), чтобы мы могли отобразить обновленное представление через ruby ​​ресурса. Когда мы переключились на представления JavaScript из представлений кемпинга, 301/302 не был передан объекту jqxhr. Нам пришлось переписать методы post, чтобы вернуть 200, чтобы решить проблему.

Вот несколько сообщений stackoverflow по теме.

Как управлять запросом на перенаправление после вызова jQuery Ajax

Ловля 302 НАЙДЕННЫХ в JavaScript

HTTP-перенаправление: 301 (постоянный) против 302 (временный)

0 голосов
/ 02 августа 2011

Инструмент, который я нашел и мог бы помочь, это wireshark.Это бесплатно и может быть в состоянии выяснить, что происходит с объектом jqXHR.Его довольно просто использовать, но следуйте этим инструкциям:

http://www.wireshark.org/ Wireshark - это анализатор сетевых протоколов для Unix и Windows.До сих пор я только слегка коснулся этого инструмента, но он полезен при выполнении анализа запросов между вашим компьютером и другими пользователями в сети.

Перед началом - Wireshark захватывает каждый запрос, поэтому нажимайте кнопку «Пуск» только тогда, когда выготовы захватить и нажать кнопку Стоп, когда вы закончите.- Вам понадобится ваш IP-адрес

Подробнее о анализе HTTP-запросов

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