Javascript:Триггерное действие при выходе из функции

StackOverflow https://stackoverflow.com/questions/134815

Вопрос

Есть ли способ прослушать выход из функции 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-файл дает пользователю понять, что что-то происходит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top