Подтвердить что ты не робот

Получить URL запроса от объекта xhr

Есть ли способ извлечь URL-адрес запроса из объекта xhr? Я вижу URL-адрес в firebug через свойство channel, но вы не можете запросить это с помощью javascript.

4b9b3361

Ответ 1

Надеюсь, я правильно понимаю вашу проблему.

Достаточно просто обернуть объекты XHR своим собственным объектом, чтобы обеспечить такую ​​функциональность.

Ниже приведен упрощенный пример:

// Assumption: GetXHR() returns a new XHR object, cross browser.

function HTTPGet(url, onStartCb, onCompleteCb)
{
  var xhr = GetXHR();
  // Construct your own xhr object that contains the url and the xhr object itself.
  var myXhr = { xhr: xhr, url: url };

  xhr.onreadystatechange = function()
  {
     if (xhr.readyState == 4 && xhr.status == 200)
     {
        onCompleteCb(myXhr);
     }
  };

  xhr.open("GET", url);
  onStartCb(myXhr);
  xhr.send(null);
}

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

Ответ 2

Если вы используете jQuery, вы можете использовать функцию "beforeSend" в запросе AJAX для изменения объекта jqXHR. То есть.

$.ajax({
...
url: "http://some/url",
beforeSend: function(jqxhr, settings) { jqxhr.requestURL = "http://some/url"; },
...
});

Объект jqXHR, переданный различным обратным вызовам, будет иметь эту переменную jqXHR.requestURL, к которой вы можете получить доступ.

Ответ 3

При следующем взломе не требуется оболочка:

var xhrProto = XMLHttpRequest.prototype,
    origOpen = xhrProto.open;

xhrProto.open = function (method, url) {
    this._url = url;
    return origOpen.apply(this, arguments);
};

Использование:

var r = new XMLHttpRequest();
r.open('GET', '...', true);
alert(r._url); // opens an alert dialog with '...'

Ответ 4

Согласно https://developer.mozilla.org/en/XmlHttpRequest, вы действительно можете получить channel, если у вас есть повышенные привилегии; однако channel является нестандартным (может не работать в других браузерах), и действительно спецификации W3C на http://www.w3.org/TR/XMLHttpRequest/ не упоминаются channel или каким-либо другим способом "извлечь URL-адрес запроса". Поэтому я подозреваю, что нет никакого способа сделать это разумно в браузерах.

Ответ 5

Несколько связанных свойств, которые могут быть полезны:


xhr2

XMLHttpRequest.responseURL - https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseURL.

Это не поддерживается IE.


получать

Если вы используете fetch, вы можете использовать Response.url - https://developer.mozilla.org/en-US/docs/Web/API/Response/url.

Это не поддерживается IE.

Ответ 6

Мне это также нужно, потому что я выполняю цикл for, где я выполняю URL-запросы.

Поскольку обычно у вас есть запрос URL-адреса перед вызовом метода open для объекта XMLHttpRequest, вы можете назначить случайное свойство для объекта xml (в моем случае это свойство url):

var xml = new XMLHttpRequest();
xml.onreadystatechange = function() {
    if ( xml.readyState == 4) {
        console.log(xml.url); // equal to originalUrl
    }
};
xml.open("GET", originalUrl, true);
xml.url = originalUrl;
xml.send();