Ajax GET URL при ошибке jqxhr

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

Это возможно?

EDIT Я вижу попытку запроса URL-адреса через FireBug и проверяю объект jqxhr через console.dir() и не могу найти ничего, что помогло бы мне идентифицировать URL-адрес, который он пытался вызвать. В идеале не нужно хранить глобальную переменную, надеясь получить это из аргументов.

Заранее спасибо, О.

$.ajax({
    type: 'get',
    url: 'somewhere/foo',
    context: this,
    success: this.mySuccess,
    error: this.myError,
    cache: false
});

myError = function (jqXhr, textStatus) {
    alert(jqXhr.url); //Get url of failed request and inject it into hyper link?
};

person Dr Schizo    schedule 12.09.2013    source источник
comment
Вы действительно пробовали это?   -  person gustavohenke    schedule 12.09.2013
comment
Да, я пробовал, это дает мне undefined, однако firebug показывает мне URL-адрес, который он пытался получить, и надеялся получить его через jqxhr.   -  person Dr Schizo    schedule 12.09.2013
comment
Убедитесь, что myError действительно this.myError. Ваш код этого не показывает, поэтому я предполагаю, что проблема в этом.   -  person gustavohenke    schedule 12.09.2013
comment
Возможно, это небольшие проблемы с приведенным выше кодом, но они попытались упростить его. Обработчик ошибок определенно срабатывает, но свойство URL-адреса jqxhr не определено? Должно ли это быть заполнено URL-адресом, который он пытался выполнить?   -  person Dr Schizo    schedule 12.09.2013


Ответы (3)


Сохраните url в переменной. И вы можете использовать его в функции ошибок. Очевидно, что URL-адрес будет таким же, как он был указан в параметре URL-адреса запроса ajax.

var url = 'somewhere/foo';

$.ajax({
    type: 'get',
    url: url,
    context: this,
    success: this.mySuccess,
    error: this.myError,
    cache: false,
    error: function(jqXHR, exception) {
       //use url variable here   
    }
});

Еще такой вариант может быть

$.ajax({
    type: 'get',
    url: 'https://google.com',
    context: this,
    success: this.mySuccess,
    error: this.myError,
    cache: false,
    beforeSend: function(jqXHR, settings) {
        jqXHR.url = settings.url;
    },
    error: function(jqXHR, exception) {
        alert(jqXHR.url);
    }
});

СКРИПКА

person Khawer Zeshan    schedule 12.09.2013
comment
Aaaaah гениально не подумал о предварительной отправке, попробуем! - person Dr Schizo; 12.09.2013
comment
Рад помочь вам @DrSchizo :) - person Khawer Zeshan; 12.09.2013
comment
Спасибо, это работает и с playframework jsRoutes. - person NewfrontSolutions; 11.01.2016
comment
Просто примечание: это не работает, если вам нужно передавать параметры в запросах GET; this.url работает (stackoverflow.com/a/5468718/4183498) - person Dušan Maďar; 15.04.2016
comment
Очевидно, что URL-адрес будет таким же, как он был указан в параметре URL-адреса запроса ajax Неверно, запрос может содержать перенаправление. - person Alex; 26.04.2018

Я считаю, что самый простой способ:

this.url

Это должно быть привязано к экземпляру объекта ajax, который имеет атрибут url.

person neves    schedule 27.09.2017
comment
Интересно :Д. Что такое this в контексте обработчика ошибок? Поскольку функция принимает объект jqXHR, а этот объект не имеет свойства this... что может быть this? Я нахожу документацию jQuery не слишком полезной на этом низком уровне. - person jeteon; 18.11.2017
comment
Функция привязана к объекту настроек ajax, что и происходит в контексте обработчика ошибок. Как правило, в javascript, если метод определен для объекта, он будет установлен для этого объекта при выполнении метода. Это функция javascript, а не функция Jquery. Это менее явно, чем Python, где вам нужно передать объект во все его собственные методы. Дополнительная информация: medium.com/quick-code/< /а> - person Mark; 22.01.2019
comment
Это лучший ответ. Имели сотни вызовов ajax, отправляющих ошибки в одну и ту же функцию обработки ошибок, и хотели быстро найти и заменить, чтобы добавить это как новый параметр Ajax-Url в функцию обработки ошибок, чтобы найти виновника было. Спасибо! Оно работает! - person MikeTeeVee; 17.12.2020

Проще всего было бы просто получить доступ к URL-адресу через настройки ajax (JQueryAjaxSettings) объект контекста обратных вызовов ошибок.

$.ajax({
    type: 'get',   
    url: 'somewhere/foo',    
    error: function() {
        alert(this.url);
    }
});
person Honkalonkalooooohhh    schedule 23.10.2018