JQuery запускает 2 обратных вызова после keyup - PullRequest
1 голос
/ 11 апреля 2011

У меня проблема с моим кодом. В частности, я хочу вызвать обратный вызов последовательно 2 после события keyup.

$('myDiv').keyup(function(){ 

 function1
 function2

});

Возможно ли дождаться загрузки первой функции (в function1 есть запросы SQL, добавление строк и т. Д.) До запуска следующей функции?

Танков много

Ответы [ 3 ]

3 голосов
/ 11 апреля 2011

Поместите вторую функцию в обратный вызов первого метода ajax, например:

function first(cb) {
    // request something. Passed in function will execute
    // once the request has completed.
    $("#foo").load('/foo', cb);
}

function second() {
    // do something
}

$('myDiv').keyup(function(){ 
    first(second);
});
1 голос
/ 11 апреля 2011

Есть два решения, в зависимости от того, что делают функции.

  1. function1 не содержит асинхронных вызовов / кода:
    Просто ставьте утверждения друг за другом:

    function1();
    function2();
    
  2. function1 содержит асинхронные вызовы / код (я полагаю, это ваш случай)
    Затем вы должны передать function2 как обратный вызов function1 и вызвать его, когда function1 обработает ответ:

    function1(function2);
    

    , где function1, например, как:

    function function1(cb) {
        $.ajax({ // asynchronous call
            //...
            success: function(data) {
                // response handled here
                cb(); // call the callback
            }
        });
    }
    
0 голосов
/ 11 апреля 2011

Javascript является однопоточным, он оценивает function2 только после завершения function1. Однако, если вы делаете AJAX в function1, это не будет иметь место (AsynchronousJAX), вы можете обойти это, поместив вызов в function2 в обработчике ответа вызова AJAX в function1.

...