Узнайте, где запрос Jquery ajax перенаправляется на

Итак, у меня есть этот запрос ajax, see-. Блондинка, около 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. -Can переключающие рамки, если мне нужно (dojo? Prototype?)

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

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

TL;DR: отправка запроса ajax. Ракурс автоматически следует за реляцией 302. Как определить, куда он перенаправляется?

ИЗМЕНИТЬ, Уточнение: Окончательный URL-адрес будет отличаться каждый раз, когда вызов "makeThing" заставляет сервер создавать то, что впоследствии размещается в 'getThing/abc123'

Ответ 1

Если возможно, настройте ваш сервер на этих страницах (целевые страницы, а не перенаправляющие), например, установите заголовок "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

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

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

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

<a href="http://www.facebook.com/sharer.php?u=THE_URL_OF_THE_PAGE">

Ответ 3

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

Ответ 4

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

Ответ 5

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