Определение того, что jQuery .ajax () разрешает строку перенаправления в - PullRequest
8 голосов
/ 20 июля 2011

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

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

Пример кода:

var originalURL = '/this/will/be/redirected';
$.ajax({
    url: originalURL,
    dataType: "html",
    success: function(data, statusText, jqXHR) {
        var endPointURL = insertMagicHere();
        alert("Our query to " + original + " ended up at " + endPointURL + "!");
    }
});

Я смотрю в jqXHR, но пока не повезло.(Хотя я новичок во всем этом, наверное, прямо у меня под носом)

Ответы [ 3 ]

4 голосов
/ 05 августа 2011

Насколько я знаю (и у меня есть testet), единственное, что можно обнаружить, ЕСЛИ произошла переадресация и сколько перенаправлений было сделано (но не ДО, куда).

Можете посмотреть мой код:

var xhr = $.ajax({
  url: originalURL,
  dataType: "html",
  success: function(data, statusText, jqXHR) {
    console.log(data);
    console.log(statusText);
    console.log(jqXHR.getAllResponseHeaders());
  }
});

Вывод jqXHR.getAllResponseHeaders() на моей машине разработчика выглядит так:

Date: Fri, 05 Aug 2011 01:29:20 GMT
Server: ...
X-Powered-By: ... 
Content-Length: 5 
Keep-Alive: timeout=15, max=98 
Connection: Keep-Alive 
Content-Type: text/html

На Keep-Alive: timeout=15, max=98 стоит взглянуть глубже. Нет результата перенаправления в max=99, в то время как ОДИН результат перенаправления в max=98

1 голос
/ 10 августа 2011

XMLHttpRequest.responseXML - это документ, означающий, что у него есть свойство baseURI, которое будет местоположением, из которого были загружены данные.Основная проблема в том, что responseXML будет установлен, только если вы вернете XML-документ обратно.В Firefox использование overrideMimeType() работает, несмотря на сообщение о синтаксической ошибке в документе:

var r = new XMLHttpRequest();
r.open("GET", "http://google.com");
r.overrideMimeType("text/xml");
r.onload = function()
{
  alert(r.responseXML.baseURI);
}
r.send(null);

К сожалению, в Chrome вам нужен настоящий XML-документ, overrideMimeType() не помогает.И MSIE даже не реализует этот метод (что не так уж и сложно, учитывая, что определить источник документа там невозможно).

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

Я не уверен, какое волшебство они используют на стороне сервера, но www.longURL.com делает то, о чем вы говорите.

Их код отправляет запрос на их сервер:

У них есть плагин jquery: http://plugins.jquery.com/project/longurl

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

Чтобы использовать его, вам нужно взглянуть на их плагин jquery, чтобы выяснить, где они запрашивают фактические данные.

EDIT

Позвольте мне исправить этот ужасно неадекватный ответ:

http://www.longURL.com имеет службу, которая расширяет сокращенные URL-адреса.

Их основной веб-сайт (после расширения URL) отслеживает каждое перенаправление, пока вы не достигнете конечного пункта назначения.

Если бы вы делали то, что они делали, вы могли бы сделать то же самое.

К сожалению, я не знаю , что они делают (кроме отправки запроса на сервер, который, вероятно, специально слушает 303 с).

Их плагин jQuery может или не может быть полезным. Если он открывает перенаправления, и вы можете выяснить, как настроить систему, вы можете получить ее через их службу, в противном случае вы можете создать сокращенную ссылку на исходную ссылку и в любом случае получить результаты через их службу ... Это болезненно, но если вы не можете / не хотите делать что-то на сервере, то это, вероятно, ваш лучший вариант.

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