Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
AngularJS:如何在$http.get中成功调用外部传递数据_Angularjs_Json_Service_Get - Fatal编程技术网

AngularJS:如何在$http.get中成功调用外部传递数据

AngularJS:如何在$http.get中成功调用外部传递数据,angularjs,json,service,get,Angularjs,Json,Service,Get,在Angular中,我使用$http.get调用从json文件(在我的代码中:file4.json)检索数据。 在成功调用中,数据被传递到数组“bmlService.items”中。console.log显示事情进展顺利。 但是,此数组在$http.get函数之外为空。 如何将数据传递到此函数之外 这是我的代码: app.service('bmlService', function($http){ var bmlService = {}; bmlService.items = [];

在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.get函数之外为空。如何将数据传递到此函数之外

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

.success(function(data) {
    bmlService.passData(data);
})
因此,基本上,您必须重新设计代码以处理回调,而不是一个接一个地分配顺序调用和变量:

var bmlService = {
    passData: function(data) {
        // do something with the data here
    }
};
但是,此数组在$http.get函数之外为空。如何将数据传递到此函数之外

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

.success(function(data) {
    bmlService.passData(data);
})
因此,基本上,您必须重新设计代码以处理回调,而不是一个接一个地分配顺序调用和变量:

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

您正在打印成功回调分配的值。http响应可用后,将异步调用回调。您将在成功回调分配值之前打印该值。一旦http响应可用,就会异步调用回调。我不同意。数据在回调之外可用。实际上,我所说的数据只在回调内部可用,更像是只有在回调执行时数据才可用,而不是在回调执行之前。我将更新我的答案以使其更清晰。@Darin Dimitrov:我不明白:我应该如何处理你在评论中提到的数据?我应该在变量“bmlService”中创建一个函数吗?你能给我解释一下吗?是的,你可以创建一个函数,它将在成功回调中被调用,并传递数据参数。在这个函数中,您可以对AJAX调用的结果执行您最初打算执行的任何操作。数据在回调之外可用。实际上,我所说的数据只在回调内部可用,更像是只有在回调执行时数据才可用,而不是在回调执行之前。我将更新我的答案以使其更清晰。@Darin Dimitrov:我不明白:我应该如何处理你在评论中提到的数据?我应该在变量“bmlService”中创建一个函数吗?你能给我解释一下吗?是的,你可以创建一个函数,它将在成功回调中被调用,并传递数据参数。在这个函数中,您可以对AJAX调用的结果执行最初打算执行的任何操作。