Возможны исключения jQuery для глобальных $.ajaxSetup()?
Я использую следующее, чтобы поймать несанкционированный доступ и заставить логин:
$.ajaxSetup({
statusCode: {
401: function(){
//do stuff
}
}
});
Прекрасно работает... при доступе к ресурсам на моих серверах (доменах), но теперь я пытаюсь использовать ресурсы сторонних API через аякс-вызовы, и их 401 также пойманы этим. Итак, как я могу:
- перепишите вышеприведенный код, чтобы поймать только 401 из моего домена или
- сделать вызов $.ajax() с исключением из вышеприведенного кода (используйте другой обработчик ошибок)
Спасибо большое!
Ответы
Ответ 1
Через эксперименты я обнаружил ответ. $.ajaxSetup() в основном устанавливает значение по умолчанию для любых запросов $.ajax(). Однако глобальную настройку можно переопределить для конкретного запроса, например:
$.ajaxSetup({
statusCode: {
401: function(){
//this will catch any and all access denied errors
}
}
});
$.ajax({
type: 'GET',
dataType: 'json',
url: someresouceurl,
statusCode: {
401: function(){
//except this one!
}
},
success: function(data) {
}
});
Ответ 2
Расширяясь в ответе @MrOBrian, в вашей функции 401 this
устанавливается объект настроек, содержащий информацию о запросе AJAX. Одним из свойств является url
. Вы можете прочитать это и проверить, не URL-адрес или нет.
$.ajaxSetup({
statusCode: {
401: function(){
var url = this.url;
if(url === myurl){ // check if url is yours
}
else{
// not your URL, do nothing
return;
}
}
}
});
Ответ 3
Из API jQuery
If the request is successful, the status code functions take the same parameters as the success callback; if it results in an error, they take the same parameters as the error callback.
Я бы порекомендовал заглянуть в параметр jqXHR, который вы получили, и посмотреть, можете ли вы сузить его до своего домена, но я не знаю достаточно об этом аспекте jQuery, чтобы дать вам точный код.