Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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中重写变量_Javascript_Angularjs_Ionic - Fatal编程技术网

Javascript 在AngularJS中重写变量

Javascript 在AngularJS中重写变量,javascript,angularjs,ionic,Javascript,Angularjs,Ionic,我在$http.post中重写了我的变量mydata。我想知道如何在$http.post之外访问变量mydata。如果我使用console.logmydata;我得到一个未定义的错误 $http.post是一个异步调用。在mydata上调用console.log时,它尚未加载,因此未定义 变量mydata位于控制器作用域中,因为您在其中定义了它,所以您确实可以访问它,只是在调用console.log时,它尚未分配给resp.data['somedata'] 如果在控制台日志周围放置超时,例如se

我在$http.post中重写了我的变量mydata。我想知道如何在$http.post之外访问变量mydata。如果我使用console.logmydata;我得到一个未定义的错误

$http.post是一个异步调用。在mydata上调用console.log时,它尚未加载,因此未定义

变量mydata位于控制器作用域中,因为您在其中定义了它,所以您确实可以访问它,只是在调用console.log时,它尚未分配给resp.data['somedata']

如果在控制台日志周围放置超时,例如setTimeoutfunction{console.logmydata},100您将看到数据

AngularJS$http是异步的,所以当您记录结果时,它还没有被分配

您可以尝试以下方法来处理数据:

var mySuccessCallback = function(somedata){
   //I have my data here!
   console.log('Here is my response: ', somedata);

   //some awesome functionallity here...
   somedata = somedata + 1;    
}

var handleMyErrorPlease = function(response){
    console.log('Something really bad happened! :( ', response.error);
}

$http.post('http://myurl', myPayload)
   .success(mySuccessCallback)
   .error(handleMyErrorPlease);

您可以在这里阅读更多内容:

您得到的值是未定义的,因为您的ajax正在进行异步调用,这意味着在响应完成之前,不会分配该值。您可以修改$http调用,如下所示:

$http({ url: 'http://example.com',
        method: 'POST',
        async: false});

这就是异步调用的工作原理…一旦异步调用成功,回调将调用..从回调返回的数据将无法在函数外部访问..因为同步执行确实会先执行外行,然后JavaScript编译器会执行异步调用。请参阅。有没有什么解决方法可以让我的数据不在httppost中?简单地说,你不能,只有在ajax成功的时候你才能得到它。。
$http({ url: 'http://example.com',
        method: 'POST',
        async: false});