Jquery angularjs显示从服务内部的json文件获取数据
我有json文件Jquery angularjs显示从服务内部的json文件获取数据,jquery,json,angularjs,asynchronous,Jquery,Json,Angularjs,Asynchronous,我有json文件 [ { "Name": "namesfoo3", "param1": "paramoffoo3", "param2": "param2offoo3" }, { "Name": "namesfoo3", "param1": "paramoffoo3", "param2": "param2offoo3" } ] 我想通过服务获取数据,并将其作为控制器传递
[
{
"Name": "namesfoo3",
"param1": "paramoffoo3",
"param2": "param2offoo3"
},
{
"Name": "namesfoo3",
"param1": "paramoffoo3",
"param2": "param2offoo3"
}
]
我想通过服务获取数据,并将其作为控制器传递。
js文件:
但在控制台登录控制器中,我返回:Object{content:null}。
数据加载正确,因为在服务中我得到了正确的对象和数据。那个么我如何将数据传递给控制器呢?
另外,当我从数组php返回数据,并将其作为json_encode传递时,该示例仍然有效?您不能在回调内部进行返回,它是异步的,在服务器响应到来时,函数已经完成,您将失去流 你需要做的是利用承诺。因此,从服务中,您将承诺返回给控制器,当响应到来时,将在控制器中触发回调。像这样:
var myApp = angular.module('myApp', []);
myApp.controller('filtrController', function ($scope, testService) {
Init();
function Init() {
$scope.data = {};
testService.getData().then(data) {
console.log(data)
});
}
});
myApp.service('testService', function ($http) {
this.getData = function () {
return $http.get('data.json');
}
});
如果您想对服务中的数据做些什么,您还可以连锁承诺。有关它的更多信息,请参见。您不能在回调内部执行返回操作,它是异步的,在服务器响应到来时,函数已经完成,您将失去流程 你需要做的是利用承诺。因此,从服务中,您将承诺返回给控制器,当响应到来时,将在控制器中触发回调。像这样:
var myApp = angular.module('myApp', []);
myApp.controller('filtrController', function ($scope, testService) {
Init();
function Init() {
$scope.data = {};
testService.getData().then(data) {
console.log(data)
});
}
});
myApp.service('testService', function ($http) {
this.getData = function () {
return $http.get('data.json');
}
});
如果您想对服务中的数据做些什么,您还可以连锁承诺。有关详细信息,请参阅。您正在执行异步调用,因此应该等待回调 将代码更改为:
function Init()
{
$scope.data={};
testService.getData().then(function(result){
console.log(result);
})
}
现在,在服务中,您还必须等待返回对象。否则,您将在提取obj之前返回它:
myApp.service('testService',function($http)
{
this.getData = function()
{
var defer = $.Deferred();
$http.get('data.json')
.success(function(response) {
// alert();
console.log(response);
defer.resolve(response);
})
.error(function(error){
console.error("The async call has fail");
});
return defer.promise();
}
});
您正在进行异步调用,因此应该等待回调 将代码更改为:
function Init()
{
$scope.data={};
testService.getData().then(function(result){
console.log(result);
})
}
现在,在服务中,您还必须等待返回对象。否则,您将在提取obj之前返回它:
myApp.service('testService',function($http)
{
this.getData = function()
{
var defer = $.Deferred();
$http.get('data.json')
.success(function(response) {
// alert();
console.log(response);
defer.resolve(response);
})
.error(function(error){
console.error("The async call has fail");
});
return defer.promise();
}
});
这是最好的答案,因为$http已经返回了promise,对于这样的简单任务不需要$q。这是最好的答案,因为$http已经返回promise,对于这样的简单任务不需要$q