Узнайте, куда перенаправляется ajax-запрос Jquery - PullRequest
11 голосов
/ 08 июля 2010

Итак, я получил этот запрос ajax, понимаете.Блондинка ростом около 6 футов выглядит следующим образом:

$.ajax({
    url: 'http://example.com/makeThing',
    dataType: 'html',
    type: 'POST',
    data: {
        something:someotherthing
    },
    complete: function(request, status) {
        console.log("headers=" + request.getAllResponseHeaders(););
    }
});

В результате получается, что запрос к / makeThing возвращает перенаправление 302 на второй URL-адрес: getThing / abc123.Все, что я хочу сделать, это выяснить, что это за второй URL (программно - он будет отличаться каждый раз, так что просто регистрация в firebug мне не поможет).Я попытался установить заголовки ответа, которые возвращаются к «завершенному» обратному вызову, но это просто дает мне то, что вернулось при втором запросе.

Ограничения: -Я не могу контролировать сервер, на котором он работаеттолько на JS.-Можно переключать фреймворки, если мне нужно (dojo? Prototype?)

В идеале, я бы сделал какой-то запрос только на заголовок к / makeThing, чтобы выяснить, что такое URL перенаправления, получив только заголовкипервоначальный ответ 302.

Если этого не сделать (поскольку jquery auto-follow перенаправляет и, похоже, не может переключаться между запросами), я получаю окончательный ответ и использую его, чтобы каким-то образом получитьURL от ... чего-то?Может быть, объект запроса?

TLDR: отправка ajax-запроса.Фреймворк автоматически следует за полученным перенаправлением 302.Как мне выяснить, куда он перенаправлен?

РЕДАКТИРОВАТЬ, Уточнение: окончательный URL будет каждый раз отличаться, так как вызов 'makeThing' заставляет сервер создавать то, что после этого размещается в 'getThing / abc123'

Ответы [ 5 ]

4 голосов
/ 08 июля 2010

Если возможно, ваш сервер должен установить заголовок на этих страницах (целевые страницы, а не перенаправляющие), например, установить заголовок "current-location", тогда вы можете сделать это:

$.ajax({
    url: 'http://example.com/makeThing',
    dataType: 'html',
    type: 'POST',
    data: {
        something:someotherthing
    },
    complete: function(request, status) {
        var location = request.getResponseHeader("current-location");
    }
});

Да, немного хак, но, поскольку перенаправление обрабатывается внутри объекта XmlHttpRequest (событие, к которому вы не можете получить доступ), у вас нет особого выбора.

Вы можете проверить спецификацию , это предназначенное поведение для XmlHttpRequest:

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

2 голосов
/ 24 июня 2013

Это может не помочь вашей конкретной ситуации, но когда у меня возникла та же проблема, я заметил страницу, на которой я остановился, после того, как у перенаправления была подсказка в HTML:

<meta property="og:url" content="THE_URL_OF_THE_PAGE" />

На некоторых страницах есть фрагменты сценариев, используемые для добавления комментариев Facebook, и иногда они также могут содержать текущий URL. Или даже так явно:

<a href="http://www.facebook.com/sharer.php?u=THE_URL_OF_THE_PAGE">
0 голосов
/ 23 октября 2013

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

0 голосов
/ 08 июля 2010

Если вы загрузите firebug, а затем откроете консоль, вы сможете следить за тем, куда на самом деле идет запрос.Когда вы увидите, что запрос AJAX завершил обработку, разверните этот элемент консоли, и вы увидите соответствующие запросы и любые заголовки ответа.

0 голосов
/ 08 июля 2010

Почему бы вам просто не вставить URL 'http://example.com/makeThing' в свой браузер и посмотреть, где вы оказались?

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