2011-05-19 24 views
2

嗨 我想调用两个用户定义的函数,期待第一个必须先执行然后第二个......但它们正在同时执行。在jquery中调用两个用户定义的函数

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

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

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

任何帮助,将不胜感激。

谢谢!

+0

而且你想用什么命令?如果你希望secondfunc只在第一个Ajax响应后才执行,请在firstfunc ajax的成功函数中调用'secondfunc'。 – 2011-05-19 18:59:26

回答

10

警告:需要的jQuery 1.5 +

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

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

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

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

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

这是因为$.ajax返回从$.Deferred继承的jqXHR对象。

如果您要附加一个回调当两个$.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); 
}); 
+0

+1好答案,但你应该链接他的文档。 – Chad 2011-05-19 19:00:13

+3

啊,是的,延期功能。我仍然不知道如何使用它们! +1 – user113716 2011-05-19 19:01:00

+0

@patrick_dw语法糖很棒:)另外'.pipe'对于中间件来说非常棒。 – Raynos 2011-05-19 19:03:48

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

@Chad:在我写这篇文章的时候,OP没有提到ajax。我已经编辑过。 – dtbarne 2011-05-19 19:01:16

0

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

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); 
}); 
相关问题