AngularJS:如何在$http.get中成功调用外部传递数据
在Angular中,我使用$http.get调用从json文件(在我的代码中:file4.json)检索数据。 在成功调用中,数据被传递到数组“bmlService.items”中。console.log显示事情进展顺利。 但是,此数组在$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 = [];
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调用的结果执行最初打算执行的任何操作。