Javascript Angular JS:访问在$http.get块中定义的$scope.variable以在另一个$http.get中使用

Javascript Angular JS:访问在$http.get块中定义的$scope.variable以在另一个$http.get中使用,javascript,angularjs,http,scope,undefined,Javascript,Angularjs,Http,Scope,Undefined,现在,我正在在线json数据源上使用$http.get。在我的控制器中: $http.get('source').success(function(data) { $scope.nextPageToken = data.nextPageToken; $scope.prevPageToken = data.prevPageToken; }); 获取变量$scope.nextpGetOken可以正常工作。显示它的HTML代码(用于测试) 控制台中的控制台返回错误的请求(400)。它似乎试图

现在,我正在在线json数据源上使用$http.get。在我的控制器中:

$http.get('source').success(function(data) {
  $scope.nextPageToken = data.nextPageToken;
  $scope.prevPageToken = data.prevPageToken;
});
获取变量$scope.nextpGetOken可以正常工作。显示它的HTML代码(用于测试)

控制台中的控制台返回错误的请求(400)。它似乎试图访问“source&pageToken=undefined”链接,这意味着$scope.nextPageToken不会被计算或传递到$http.get参数

这很奇怪,因为当我定义一个字符串变量并将其连接到$http.get参数的URL时,URL是正确的。例如,当我尝试时它就起作用了

this.key = 'someKey';
$http.get('source&key=' + this.key).success(function(data) {
  $scope.nextPageToken = data.nextPageToken;
  $scope.prevPageToken = data.prevPageToken;
});
这可能是因为我试图访问一个只能在$http.get函数块内访问的变量吗?如果是,如何访问块外的$scope.nextPageToken变量

感谢您的帮助。谢谢

编辑(在basilikum的回答之后):我也尝试过

this.someKey = 'stringKey';
$http.get('source&key=' + this.someKey).success(function(data) {
    $scope.nextPageToken = data.nextPageToken;
    $scope.prevPageToken = data.prevPageToken;
    $http.get('source&pageToken=' + $scope.nextPageToken + '&key' + this.someKey).success(function(data) {
        $scope.picture = data.thumbnail.url;
    });
});
(这是我所拥有的实际代码的一个更具体的示例) 当我这样做的时候,我得到的错误是

TypeError: Cannot read property 'someKey' of undefined

我已经尝试在另一个中嵌套$http.get,但是我完全遇到了另一个错误,所以我认为这只是造成了更多的问题。有人能告诉我这里发生了什么吗?

您正在处理异步代码。当您发送第二个请求时,第一个请求尚未完成,因此尚未设置
nextPageToken
prevPageToken
。一个简单的解决方案是将第二个请求放在第一个请求的success函数中:

$http.get('source').success(function(data) {
    $scope.nextPageToken = data.nextPageToken;
    $scope.prevPageToken = data.prevPageToken;
    $http.get('source&pageToken=' + $scope.nextPageToken).success(function(data) {
        $scope.picture = data.thumbnail.url;
    });
});

@basilikum是对的,但您可以像这样链接您的函数:

$http.get('source')
  .then(function(data) {
    $scope.nextPageToken = data.nextPageToken;
    $scope.prevPageToken = data.prevPageToken;
    return $http.get('source&.pageToken=' + $scope.nextPageToken)
  }).then(function(data) {
    $scope.picture = data.thumbnail.url;
  });

Angular允许将承诺链接起来,这样您就可以摆脱所有丑陋的嵌套。您所要做的就是从每个
电话中回复一个承诺。

谢谢您的帮助。我想我越来越接近了,但我现在又犯了一个错误。请查看已编辑的问题。阅读此问题的答案:您将看到,
根据上下文的不同,其含义不同<代码>成功功能内部的此
与功能外部的此不同。您可以定义一个保存数据的变量(
var someKey='stringKey';
),或者使用变量保存
this
var that=this;that.someKey='stringKey';
)。这是因为您在函数外部使用的
与函数内部使用的
不相同。请阅读此文(非双关语)
$http.get('source').success(function(data) {
    $scope.nextPageToken = data.nextPageToken;
    $scope.prevPageToken = data.prevPageToken;
    $http.get('source&pageToken=' + $scope.nextPageToken).success(function(data) {
        $scope.picture = data.thumbnail.url;
    });
});
$http.get('source')
  .then(function(data) {
    $scope.nextPageToken = data.nextPageToken;
    $scope.prevPageToken = data.prevPageToken;
    return $http.get('source&.pageToken=' + $scope.nextPageToken)
  }).then(function(data) {
    $scope.picture = data.thumbnail.url;
  });