Есть ли способ извлечь URL-адрес запроса из объекта xhr? Я вижу URL-адрес в firebug через свойство channel, но вы не можете запросить это с помощью javascript.
Получить URL запроса от объекта xhr
Ответ 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();