您好 我试图调用两个用户定义的函数,并期望第一个必须首先执行,然后第二个执行..但它们同时执行。
$.firstfunc = function(){
//Do something
//jQuery.ajax({
});
$.secondfunc = function(){
//Do something
jQuery.ajax({
});
$.(document).ready(function(){
$.firstfunc();
$.secondfunc();
});
任何帮助将不胜感激。
谢谢!
答案 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 );
});