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之外,使用原生来做,请提供一个思路

阅读 3.5k
3 个回答

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

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

设置两个全局变量定义为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)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题