【问题标题】:AngularJS: How to pass data outside a succes call in $http.getAngularJS:如何在 $http.get 中的成功调用之外传递数据
【发布时间】:2015-11-29 10:13:36
【问题描述】:

在 Angular 中,我创建了一项服务,通过 $http.get 调用从 json 文件(在我的代码中:file4.json)中检索数据。 在成功调用中,数据被传递到数组“bmlService.items”中。 console.log 显示事情进展顺利。 但是,这个数组在 $http.get 函数之外是空的。 如何在这个函数之外传递数据?

这是我的代码:

app.service('bmlService', function($http){
var bmlService = {};

bmlService.items = [];

    $http.get("file4.json")

        .success(function(data){
            bmlService.items = data;

            console.log("inside succes call: ", bmlService.items);
            })

        .error(function(data, status){
            alert("Something went wrong...");
        });

        console.log("outside http.get: ", bmlService.items);

return bmlService;

});

【问题讨论】:

  • 您正在打印成功回调分配的值之前。一旦 http 响应可用,回调就会异步调用

标签: angularjs json service get


【解决方案1】:

但是,这个数组在 $http.get 函数之外是空的。如何将数据传递到此函数之外?

您不能,因为 AJAX 调用是异步的,并且此数据仅在回调执行后才可用 - 这可能在触发 AJAX 调用后的更晚阶段发生。因此,如果您想将其传递给外部,您可以调用其他函数并将数据作为参数传递给该函数:

.success(function(data) {
    bmlService.passData(data);
})

所以基本上你将不得不重新设计你的代码以使用回调而不是一些顺序调用和一个接一个地分配的变量:

var bmlService = {
    passData: function(data) {
        // do something with the data here
    }
};

【讨论】:

  • 我不同意。数据在回调之外可用。但只有在它被执行之后。
  • 实际上我的意思是它仅在回调内部可用,更像是数据仅在回调执行时可用,而不是之前可用。为了更清楚,我会更新我的答案。
  • @Darin Dimitrov:我不明白:我应该如何处理评论中提到的数据?我应该在变量“bmlService”中创建一个函数吗?你能给我解释一下吗?
  • 是的,您可以创建一个将在成功回调中调用并传递数据参数的函数。在此函数中,您可以对 AJAX 调用的结果执行您最初打算执行的任何操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
相关资源
最近更新 更多