首页 > ajax异步

ajax异步

现有有个需求,页面有几个按钮,点击任何一个按钮,都会发送一次ajax,如果点击了2个按钮,要把这两个ajax返回过来的数据求交集,请问除了使用同步ajax的方法外有没有别的办法保证求交集一定在ajax返回数据之后调用?

代码类似与这样:

// 在getData中,发送ajax请求

var list1 = getData();

var list2 = getData();

// intersect 是自己写的求交集的方法 ,inter 是list1和list2的交集

var inter = intersect(list1,list2)

除了jquery的defrred之外,使用原生来做,请提供一个思路


可以采用数字来标记吧。就数字标记发送的ajax请求数,ajax返回结果时数字-1,等数字为0时在求交集。

=====
@杨川宝 的答案很好,采用promise来做。


得用 $.when 详情看这里
http://.com/q/1010000004169937?utm_source=APP&utm_medium=iOS&utm_campaign=socialShare


设置两个全局变量定义为false,ajax请求后就设置成true,然后进行轮训,
全局变量为true了就执行你的函数,累死这样,不过有点笨而已,也不适为一种方法吧。
如下

var flag1 = flag2  = false;
var timer = null;

var list1 = getData(function(){
    //ajax....
    success: function(){
        flag1 = true;
    }
});

var list2 = getData(function(){
    //ajax....
    success: function(){
        flag2 = true;
    }
});

// intersect 是自己写的求交集的方法 ,inter 是list1和list2的交集

timer = setInterval(function(){
    if(flag1 === true && flag2 === true){
        var inter = intersect(list1,list2);
        clearInterval(timer);
        timer = null;
    }else{
        // 这里做个计数器,多少秒或者轮训多少次之后也关闭定时器,免得进入死循环
    }
},100)

var cache = [];


// 在getData中,发送ajax请求
getData(test);//get list1

getData(test);//get list2


function test(data){
    cache.push(data);

    if(cache.length === 2){
        var inter = intersect(cache[0], cache[1])
    }
}
【热门文章】
【热门文章】