在jquery中调用两个用户定义的函数

时间:2011-05-19 18:54:57

标签: jquery function callback call

您好 我试图调用两个用户定义的函数,并期望第一个必须首先执行,然后第二个执行..但它们同时执行。

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

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

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

任何帮助将不胜感激。

谢谢!

4 个答案:

答案 0 :(得分:10)

警告:需要jQuery 1.5 +

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

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

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

使用$.Deferred$.when的黑魔法。

它基本上说当你第一个函数完成它的ajax调用然后调用第二个函数。

这是因为$.ajax会返回一个继承自$.Deferred的{​​{3}}对象。

如果您想在$.firstfunc$.secondfunc完成时附加回调,那么您可以执行以下(需要jQuery 1.6):

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

遗产: jQuery 1.4.2& 1.3.2支持。

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

$.secondfunc = ...

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

答案 1 :(得分:0)

让第一个函数在代码之后调用第二个函数。

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
});

答案 2 :(得分:0)

这是因为Ajax请求是异步处理的。如果您希望第二个函数在第一个函数之后运行,请将其添加到第一个Ajax请求的回调函数中。

答案 3 :(得分:0)

你应该从第一个.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 );
});