假设我有三个功能:
function A() {
//does a jquery getJson() request and applies json data to html
function C()
}
function B() {
//does a jquery getJson() request and applies json data to html
function C()
}
function C(){
// applies cosmetic changes to the already set html which was made be Functions A & B.
//for example it converts numbers 1-5 set in a span to starred rating.
}
问题是函数A和B是异步的,它们的回调执行取决于接收json所花费的时间。因此,在json收到的一个或另一个数据集上调用函数C失败。
所以我想要的是,在接收到jsons并将其数据绘制到页面上之后,应该执行函数C.它只需要调用一次。
我有一种感觉,关闭这可能是可能的,但我不确定。
答案 0 :(得分:3)
您可以使用Deferred Object来处理异步调用。这样做,无论何时发回响应,您的代码都将按阅读顺序执行:
var jqxhr = $.getJSON('url', function(data) {
alert('first callback');
});
jqxhr.done(function() {
alert('second callback');
});
然后使用jQuery.when()
处理多个延迟:
var jqxhr1 = $.getJSON('url1');
var jqxhr2 = $.getJSON('url2');
$.when(jqxhr1, jqxhr2).done(function(data1, data2) {
alert('both done');
});
答案 1 :(得分:3)
我认为这是最简单的方式
function x() {
var
aflag = false,
bflag = false;
function a() {
// ajax
aflag = true;
c();
}
function b() {
// ajax
bflag = true;
c();
}
function c() {
if (aflag && bflag) {
// it's ready
}
}
}
答案 2 :(得分:1)
您基本上可以在当前ajax调用的成功回调中调用下一个函数。这样你就可以按顺序错开它们
<强> EX:
$.getJSON("/someurl", function() {
B();
});