Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS$rootScope未按预期工作_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript AngularJS$rootScope未按预期工作

Javascript AngularJS$rootScope未按预期工作,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我寻找我的问题,但找不到解决办法。我希望能够将从http.get初始化的变量传递到angular中的http.post。问题是我的retur数组总是空的。你可以找到我的plnkr代码和我想要实现的注释。 任何关于如何实现这一点的想法都值得赞赏。在javascript中,调用是异步的。您必须在$http.get响应内调用$http.post: $http.get('someurl').success(function (data) { var data_array = JSON.parse

我寻找我的问题,但找不到解决办法。我希望能够将从http.get初始化的变量传递到angular中的http.post。问题是我的retur数组总是空的。你可以找到我的plnkr代码和我想要实现的注释。
任何关于如何实现这一点的想法都值得赞赏。

在javascript中,调用是异步的。您必须在$http.get响应内调用$http.post:

$http.get('someurl').success(function (data) {
    var data_array = JSON.parse(data);
    var tempArray = new Array();
    tempArray['hi'] = 'hi';
    $rootScope.post_array = tempArray; 

    console.log($rootScope.post_array);
    $http.post('some-other-url',$rootScope.post_array).success(function(data){ 
        console.log(data);
    })    
});

在这一行:
$rootScope.post_array=tempArray
tempArray是否如您所期望的那样?是的,在作用域内数组是正常的。谢谢您的快速回复,先生,但这不应该是开箱即用的吗?$rootScope应该像一个全局js变量,并且它只有在成功时才初始化,所以我猜它也应该在get方法之外可见。确实,将post移到get请求中应该可以工作,但我会预先提供另一种方法。@Susy11 Alexandre是正确的。如果您调试这些行,您将在
$http.get(..)
行之后看到,您将直接进入
console.log($rootScope.post\u数组)甚至没有到达服务器。如果要将此数据分配给
$rootScope
,则必须等待请求返回。Noob问题可能是:success函数并不意味着请求成功?这意味着rootScope在拥有数据后被初始化,对吗?你错了。success函数表示您的请求成功。在我的代码中,当$http.get success完成时,您的$rootScope.post_数组将被分配,您可以在所有应用程序中访问它。但您必须等待请求返回。您必须理解,这里我们处理的是异步函数,它们不是同时执行的。在您的代码中,浏览器将执行$http.get,然后在返回$http.get之前执行$http.post。好的,谢谢您的提醒。我把我的帖子移到了我的get里,现在它开始工作了。接受答复