Javascript:Триггерное действие при выходе из функции
-
02-07-2019 - |
Вопрос
Есть ли способ прослушать выход из функции javascript?Триггер, который можно настроить после завершения функции?
Я пытаюсь использовать технику запутывания пользовательского интерфейса (BlockUI), пока объект AJAX извлекает данные из БД, но функция не обязательно выполняется последней, даже если вы поместите ее в конец вызова функции.
Пример:
function doStuff() {
blockUI();
ajaxCall();
unblockUI();
};
Есть ли способ, чтобы doStuff прослушивал завершение ajaxCall перед запуском unBlockUI?В реальности функция обрабатывается линейно, вызывая каждый объект по порядку, а затем для завершения каждого из них создается отдельный поток.Итак, хотя мой вызов AJAX может занять 10–15 секунд, я блокирую пользователя всего на долю секунды из-за линейного выполнения функции.
Есть менее элегантные способы обойти это... завершение цикла только тогда, когда возвращаемое значение, установленное функцией AJAX, установлено в true или что-то в этом роде.Но это кажется излишне сложным и неэффективным.
Решение
Как бы вы ни выполняли свои процедуры Ajax, вам нужна функция «обратного вызова», которая будет запущена после ее завершения:
function ajaxCall(callback){
//do ajax stuff...
callback();
}
Затем:
function doStuff(){
blockUI();
ajaxCall(unblockUI);
}
Другие советы
Ваш вызов AJAX должен указывать функцию обратного вызова.Вы можете вызвать unblockUI из обратного вызова.
САЯКС — это простая библиотека AJAX, которая содержит дополнительную информацию о том, как выполнять вызовы AJAX.
Есть также еще один пост это описывает то, что вы ищете.
Вы можете сделать синхронный xhr.Это приведет к блокировке всего пользовательского интерфейса на время вызова (независимо от того, сколько времени это может занять).
Вам необходимо перепроектировать поток вашей программы, чтобы он был совместим с асинхронным потоком, например, указав функцию обратного вызова, которая будет вызываться после обработки ответа.Узнайте, как Prototype или JQuery или...это выполняет.
Ответ прост: вам нужно вызвать unblockUI(), когда ваш ajax-запрос возвращает результат. Используя jQuery, вы можете сделать это следующим образом:
function doStuff(){
blockUI();
jQuery.ajax({
url: "example.com",
type: "POST", //you can use GET or POST
success: function(){
unblockUI();
}
});
}
Мне кажется, вы хотите, чтобы пользователь ждал, пока информация извлекается из базы данных.Когда я делаю Ajax-вызов для получения некоторой информации из базы данных, я отображаю анимированный GIF-файл с надписью «получу это...» — он постоянно мигает, пока информация не будет получена и отображена на веб-странице.Когда информация отображается, анимированный GIF-файл отключается/скрывается, а фокус перемещается на отображаемую новую информацию.Анимированный GIF-файл дает пользователю понять, что что-то происходит.