使用先前ajax请求中的数据发出Ajax请求

时间:2013-11-04 04:50:53

标签: ajax angularjs

我正在尝试编写一个Angular页面来与我的Nodejs服务器进行通信,但我遇到了麻烦。

我需要使用多个Ajax请求,这些请求依赖以前的ajax请求中的数据才能工作。

因此,Ajax请求#1提供所有其他Ajax请求使用的数据,而Ajax请求#2使用来自ajax请求#1的数据来获取Ajax请求#3所需的数据。

由于Angular是异步的,如何在进行下一次ajax调用之前让我的脚本等待来自第一个的数据。

id = ajax()

等待数据

token = ajax(id)

等待数据

gametoken = ajax(id,token)

等待数据

1 个答案:

答案 0 :(得分:2)

Chandermani是正确的,只需记住确保在您需要的范围内提供所需的变量。

var id,token,gametoken;
$http.get('http://host.com/first')
   .then(function(result){
       id=result;
       return $http.get('http://host.com/second/'+id);
    }
    .then(function(result){
        token = result
        return $http.get('http://host.com/third'+id+'/'+token);
    }
    .then(function(result){
        gametoken = result;
        //Do other code here that requires id,token and gametoken
    }

编辑: 你不必将承诺链接起来。如果您想在以后拨打电话,并且想要确保承诺已经解决,您可以使用$ q.all();

var id,token,gametoken;
var p1 = $http.get('http://host.com/first')
   .then(function(result){
       id=result;
    }

// Later on to make your new second call
 $q.all([p1]).then(function(){
      //Make second call knowing that the first has finished.
 }

$ q.all()接受一个数组,这样你可以根据需要加入多个promises,并等到它们全部解析完毕。