На мой взгляд, обработчик ошибок недоступен, потому что это добавило бы путаницы.
Текущая спецификация функции:
$.get(url, [data], [function(data, status, xhr){ ... }], [dataType])
при добавлении обработчика ошибок параметр будет преобразован в:
$.get(url, [data], [function(data, status, xhr){ ... }], [function(data, status, xhr){ ... }], [dataType])
В случае дополнительного параметра обработчика ошибок было бы сложно понять, какой обработчик вы имеете в виду при выполнении ajax-вызова:
$.get('http://example.com', {query: 1}, function(result) {
//Handle the request
});
В этом случае обработчик ошибки или успеха? Это довольно сложно понять. Конечно, вы можете добавить некоторые дополнительные null
в параметры, но это не чистое решение и добавляет путаницы.
В $.ajax есть обработчик ошибок, потому что он принимает параметры как объект JavaScript. Это не создает никаких проблем, если вы укажете функцию обработчика ошибок в качестве свойства объекта параметров.
Решение.
Просто используйте обещания:
var xhr = $.post(...);
xhr.done(function(data, status, xhr){
//Handle when success
}).fail(function(xhr, errorType, error){
//Handle when an error occurred.
}).always(function(){
//A handler executed always, on success or error
//Use this to hide the loading image for example
})
При вызове функция вызова ajax вернет объект обещания. Прикрепите к промису свои обработчики успеха (метод done()
) и обработчики ошибок (метод using fail()
).
always()
выполняется в любом случае (после выполнения обработчиков done()
или fail()
). Полезно завершить любую работу, связанную с запросом, например, скрыть загрузочную картинку.
person
Dmitri Pavlutin
schedule
31.12.2015