Javascript: действие триггера при выходе из функции - PullRequest
3 голосов
/ 25 сентября 2008

Есть ли способ прослушивания функции JavaScript, чтобы выйти? Триггер, который можно настроить после завершения функции?

Я пытаюсь использовать метод обфускации пользовательского интерфейса (BlockUI), когда объект AJAX извлекает данные из БД, но функция не обязательно выполняется последней, даже если вы поставили ее в конце вызова функции.

Пример:

function doStuff() {
  blockUI();
  ajaxCall();
  unblockUI();
};

Есть ли способ для doStuff прослушивать завершение ajaxCall до запуска unBlockUI? Как таковой, он обрабатывает функцию линейно, вызывая каждый объект по порядку, затем создается отдельный поток для завершения каждого. Таким образом, хотя мой вызов AJAX может занять 10-15 секунд, я блокирую пользователя только на долю секунды из-за линейного выполнения функции.

Есть менее изящные способы обойти это ... положить конец цикла только тогда, когда возвращаемое значение, установленное функцией AJAX, установлено в true или что-то в этом роде. Но это кажется излишне сложным и неэффективным.

Ответы [ 6 ]

4 голосов
/ 25 сентября 2008

Как бы вы ни выполняли свои подпрограммы Ajax, вам нужна функция «обратного вызова», которая будет запущена после ее завершения:

function ajaxCall(callback){
    //do ajax stuff...
    callback();
}

Тогда:

function doStuff(){
    blockUI();
    ajaxCall(unblockUI);
}
1 голос
/ 25 сентября 2008

Ваш AJAX-вызов должен указывать функцию обратного вызова. Вы можете вызвать unblockUI из системы обратного вызова.

SAJAX - это простая библиотека AJAX, в которой есть дополнительная помощь по выполнению вызовов AJAX.

Там также еще один пост , который описывает то, что вы ищете.

0 голосов
/ 26 сентября 2008

Мне кажется, что вы хотите, чтобы пользователь ждал, пока информация будет извлечена из БД. Когда я выполняю Ajax-вызов для получения некоторой информации из базы данных, я делаю, чтобы отображать анимированный GIF-файл с надписью «получать его» - он постоянно мигает, пока информация не будет извлечена и отображена на веб-странице. Когда информация отображается, анимированный GIF отключается / скрывается, и фокус перемещается на новую отображаемую информацию. Анимированный GIF-файл позволяет пользователю узнать, что что-то происходит.

0 голосов
/ 26 сентября 2008

Ответ прост, вам нужно вызвать unblockUI (), когда ваш ajax-запрос возвращает результат, используя jQuery, вы можете сделать это так:

function doStuff(){

    blockUI();

    jQuery.ajax({
        url: "example.com",
        type: "POST",           //you can use GET or POST
        success: function(){

            unblockUI();
        }
    });
}
0 голосов
/ 25 сентября 2008

Вам необходимо перестроить поток вашей программы, чтобы он был совместим с потоком асинхронности, например, указав функцию обратного вызова, которая будет вызываться после обработки ответа. Посмотрите, как Prototype, JQuery или ... выполняет это.

0 голосов
/ 25 сентября 2008

Вы можете сделать синхронный xhr. Это вызовет весь блок пользовательского интерфейса на время вызова (независимо от того, сколько времени это займет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...