Вызов двух пользовательских функций в jquery - PullRequest
2 голосов
/ 19 мая 2011

Привет! Я пытаюсь вызвать две пользовательские функции и ожидаю, что сначала должна выполняться первая, а затем вторая ... но они выполняются одновременно.

$.firstfunc = function(){
//Do something
//jQuery.ajax({
});

$.secondfunc = function(){
//Do something
jQuery.ajax({
});

$.(document).ready(function(){
$.firstfunc();
$.secondfunc();
});

любая помощь будет принята с благодарностью.

Спасибо!

Ответы [ 4 ]

10 голосов
/ 19 мая 2011

Предупреждение: Требуется jQuery 1.5 +

$.firstfunc = function() {
  return $.ajax({});
}

$.secondfunc = function() {
  return $.ajax({});
}

$(function() {
  $.when($.firstfunc).then($.secondfunc);
});

Использование черной магии $.Deferred и $.when.

В основном говорится, что когда первая функция завершает свой вызов ajax, а затем вызывает вторую функцию.

Это потому, что $.ajax возвращает объект jqXHR, который наследуется от $.Deferred.

Если вы хотите прикрепить обратный вызов, когда оба $.firstfunc и $.secondfunc завершены, вы можете сделать следующее (требуется jQuery 1.6):

$(function() {
  $.first().pipe($.second).done(function(second_data) {
    // both finished.
  });
});

Legacy: Поддержка jQuery 1.4.2 и 1.3.2.

$.firstfunc = function(cb) {
  $.ajax({
    success: function() {
      ...
      cb();
    },
    ...
  });
}

$.secondfunc = ...

$(function() {
  $.firstfunc($.secondfunc);
});
0 голосов
/ 19 мая 2011

Вы должны вызвать второй вызов с обратным вызовом первого .ajax вызова.

Вы можете определить его явно:

$.firstfunc = function(){
    //Do something
    jQuery.ajax({
        callback:$.secondfunc
    });
};

$.secondfunc = function(){
    //Do something
    jQuery.ajax({
    });
};

$(document).ready(function(){
    $.firstfunc();
});

... или передать его какаргумент:

$.firstfunc = function( func ){
    //Do something
    jQuery.ajax({
        callback:func
    });
};

$.secondfunc = function(){
    //Do something
    jQuery.ajax({
    });
};

$(document).ready(function(){
    $.firstfunc( $.secondfunc );
});
0 голосов
/ 19 мая 2011

Это происходит потому, что запросы Ajax обрабатываются асинхронно.Если вы хотите, чтобы вторая функция выполнялась после первой, добавьте ее в функцию обратного вызова первого запроса Ajax.

0 голосов
/ 19 мая 2011

Пусть первая функция вызывает вторую функцию после кода.

function firstfunc() {
    // Do something

    secondfunc();
}

function secondfunc() {
    // Do something else
}

РЕДАКТИРОВАТЬ (теперь, когда я вижу ваши изменения):

Используйте часть обратного вызова функций ajax.

$.get("somepage.php", "key1=value1&key2=value2", function(data) {
    // This code will run when the result is received
});
...