Обнаружение перенаправления в jQuery $."Аякс"?
Я хочу использовать jQuery, чтобы получить URL-адрес и явно проверить, если он ответил с 302 перенаправления, но не за перенаправлением.
jQuery $.ajax кажется, всегда следовать перенаправляет. Как я могу предотвратить это, и перенаправление без него?
есть различные вопросы с названиями, такими как" jQuery ajax redirect", но все они, похоже, связаны с выполнением какой-то другой цели, а не просто напрямую проверяют статус сервера дает.
3 ответов:
запрос AJAX никогда не имеет возможности не следовать перенаправлению (т. е. он должен следовать перенаправлению). Более подробную информацию можно найти в этом ответе https://stackoverflow.com/a/2573589/965648
Добро пожаловать в будущее!
прямо сейчас у нас есть свойство" responseURL " из объекта xhr. УРА!
посмотреть как получить url-адрес ответа в XMLHttpRequest?
однако jQuery (по крайней мере 1.7.1) не дает прямого доступа к объекту XMLHttpRequest. Вы можете использовать что-то вроде этого:
var xhr; var _orgAjax = jQuery.ajaxSettings.xhr; jQuery.ajaxSettings.xhr = function () { xhr = _orgAjax(); return xhr; }; jQuery.ajax('http://test.com', { success: function(responseText) { console.log('responseURL:', xhr.responseURL, 'responseText:', responseText); } });это не чистое решение, и я полагаю, что команда jQuery сделает что-то для responseURL в будущем выпуск.
совет: просто сравните исходный URL с responseUrl. Если он равен, то перенаправление не было дано. Если это "неопределенный", то responseUrl, вероятно, не поддерживается. Однако, как сказал Ник Гарви, AJAX-запрос никогда не имеет возможности не следовать перенаправлению, но вы можете решить ряд задач с помощью responseUrl собственность.
в то время как другие люди, которые ответили на этот вопрос (к сожалению) правильно, что эта информация скрыта от нас браузером, я думал, что я опубликую обходной путь, который я придумал:
Я настроил свое серверное приложение для установки пользовательского заголовка ответа (
X-Response-Url), содержащий запрошенный url-адрес. Всякий раз, когда мой ajax-код получает ответ, он проверяет, еслиxhr.getResponseHeader("x-response-url")определяется, и в этом случае он сравнивает его с url, который он первоначально запросил через$.ajax(). Если строки отличаются, я знаю был редирект, и кроме того, какой url мы на самом деле прибыли.это имеет недостаток, требующий некоторой помощи на стороне сервера, а также может сломаться, если url-адрес получает munged (из-за проблем с цитированием/кодировкой и т. д.) Во время поездки туда и обратно... но в 99% случаев, это, кажется,получить работу.
на стороне сервера моим конкретным случаем было приложение python, использующее веб-фреймворк Pyramid, и я использовал следующий фрагмент кода:
import pyramid.events @pyramid.events.subscriber(pyramid.events.NewResponse) def set_response_header(event): request = event.request if request.is_xhr: event.response.headers['X-Response-URL'] = request.url
Comments