Блог → jQuery: AJAX, JSONP и обработка ошибок

Как известно, существует такая технология, как JSONP, с помощью которой можно выполнять кросс-доменные AJAX запросы. Так вот, совсем недавно я обнаружил, что при ее использовании jQuery совершенно не умеет обрабатывать ошибки. Приведу небольшой пример.


$.ajax({
	type: 'GET',
	url: 'http://yandex.ru/404',
	dataType: 'jsonp',
	success: function(json){
		alert('success')
	},
	error: function(){
		alert('error')
	}
});

Логично ожидать, что в результате выполнения приведенного скрипта, на экране монитора появится сообщение error, но увы этого не произойдет. Как же быть в этом случае? Мне известно два способа которыми возможно перехватить ошибку.

Способ первый, неправильный


$.ajax({
	type: 'GET',
	url: 'http://yandex.ru/404',
	dataType: 'jsonp',
	timeout: 10000,
	success: function(json){
		alert('success')
	},
	error: function(){
		alert('error')
	}
});

В результате выполнения этого кода, мы все-таки увидим сообщение error, но использовать его не рекомендуется. Дело в том, что функция error сработает только после истечения времени, указанного в timeout, а не в момент наступления ошибки.

Способ второй, правильный

Оказывается для решения данной проблемы существует готовый плагин jquery-jsonp. Все что нам нужно, это подключить его на страничке, а AJAX запрос переписать следующим образом:


$.jsonp({
	type: 'GET',
	url: 'http://yandex.ru/404',
	callbackParameter: 'callback',
	dataType: 'jsonp',
	timeout: 10000,
	success: function(json){
		alert('success')
	},
	error: function(){
		alert('error')
	}
});

Теперь проверьте работу последнего скрипта. Ошибка появляется незамедлительно.


Комментарии (2)

Виктор Панченко
Спасибо
Ответить
Дмитрий
Спасибо. Маленький комментарий: У меня с "callbackParameter: 'callback'" не работало.
Ответить


Оставить свой комментарий


Представтесь, пожалуйста *

Ваш комментарий

Число на картинке *

captcha

На хостинг