首页 > 解决方案 > 在 $http.post 方法中复制数组

问题描述

$scope.openDocImg = function(id, e){
    var data = [];

    ...

    $http.post("/showDocument", cid).then(function(response){
        data = response.data.slice(0);
        console.log(data);
    });

    console.log(data.length);  //displays 0
    console.log(data);

    ...
}

我不完全明白为什么 post 方法中的数据充满了内容而外部没有。是因为函数内外的变量作用域吗?

以及如何将内容复制到外部范围?

标签: javascriptangularjs

解决方案


由于$http.post方法是异步执行的, console.log(data.length);因此在您收到服务器的响应之前执行语句。

这就是为什么您0在尝试记录data.

你应该使用一个callback函数。

function postRequest(callback){
  $http.post("/showDocument", cid).then(function(response){
    callback(response.data.slice(0));
  });
}

$scope.openDocImg = function(id, e){
    var data = [];

    ...

    postRequest(function(data){
       console.log(data.length); 
       console.log(data);
    });

    ...
}

推荐阅读