jQuery метод .always()

jQuery объект Deferred

Определение и применение

jQuery метод .always() добавляет обработчик или обработчики, которые будут вызваны при изменении состояния объекта Deffered на resolved (успешное выполнение), или rejected (выполнение отклонено).

Метод .always() принимает один или несколько аргументов, каждый из которых может быть либо одной функцей, либо массивом функций. При изменении состояния объекта Deffered на resolved (успешное выполнение), или rejected (выполнение отклонено) эти функции обратного вызова (alwaysCallbacks) будут вызваны и выполнены в порядке их добавления. Метод .always() дополнительно может использовать аргументы, предоставленные вызовами методов .resolve(), .reject(), .resolveWith() или .rejectWith().


Ввиду того, что метод .always() возвращает объект Deffered, то к нему могут быть присоеденены по цепочке другие методы объекта Deffered, включая дополнительные методы .always().


jQuery синтаксис:

Синтаксис 1.6:

deferred.always( alwaysCallbacks )
deferred.always( alwaysCallbacks, ..., alwaysCallbacks )


alwaysCallbacks - Function (или массив функций)

Добавлен в версии jQuery

1.6

Значения параметров

ПараметрОписание
alwaysCallbacksФункция или массив функций, которые вызываются при изменении состояния объекта Deffered на resolved (успешное выполнение), или rejected (выполнение отклонено).

Пример использования

<!DOCTYPE html>
<html>
	<head>
		<title>Использование jQuery метода .always()</title>
		<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
		<script>
	$( document ).ready(function() {
	  $( ".test" ).click(function(){ // задаем функцию при нажатиии на элементс классом .comments
	    $.get( "https://jsonplaceholder.typicode.com/users" ) // загружаем данные с сервера с помощью HTTP запроса методом GET
	    .done(function( data ) {  // добавляем обработчик при успешном выполнении запроса
	      console.log( "успешное выполнение, id пользователя - " + data[0].id ); // выводим в консоль свойство id первого элемента массива полученных данных
	    })
	    .fail(function() {  // добавляем обработчик при неудачном выполнении запроса
	      console.log( "выполнение отклонено" ); // выводим в консоль текстовую информацию
	    })
	    .always(function() {  // добавляем обработчик при успешном выполнении запроса, или при неудачном выполнении запроса
	      console.log( "успешное выполнение, или выполнение отклонено" ); // выводим в консоль текстовую информацию
	    })
	  });
	});
		</script>
	</head>
	<body>
		<button class = "test">Клик</button>
	</body>
</html>

В этом примере с использованием jQuery функции $.get() мы при нажатии на элемент <button> (кнопка) загружаем данные с сервера с помощью HTTP запроса методом GET.

Так как функция $.get() возвращает объект jqXHR, который является производным от объекта Deffered, мы можем использовать в цепном вызове методы объекта Deffered.

Метод .done() будет вызван, когда состояние объекта Deffered изменится на resolved (при успешном запросе), а метод .fail() будет вызван в том случае, если состояние объекта Deffered изменится на rejected (выполнение отклонено).

Обратите внимание на важный момент, независимо от того будет наш запрос успешный, или нет, метод .always() будет вызван в любом случае. Изображение ниже демонстрирует успешный запрос.

Результат нашего примера:

Пример использования jQuery метода .always()
Пример использования jQuery метода .always()
jQuery объект Deferred