Javascript Angular/Controller加载json文件失败,出现一个我无法理解的异常
对不起,也许是个愚蠢的问题,但我还是个有棱角的新手 守则: --编辑#2---------------编辑 --编辑结束#2---------------结束 错误:Javascript Angular/Controller加载json文件失败,出现一个我无法理解的异常,javascript,angularjs,angular-promise,angularjs-http,angularjs-rootscope,Javascript,Angularjs,Angular Promise,Angularjs Http,Angularjs Rootscope,对不起,也许是个愚蠢的问题,但我还是个有棱角的新手 守则: --编辑#2---------------编辑 --编辑结束#2---------------结束 错误: Error: [$rootScope:infdig] http://errors.angularjs.org/1.5.5/$rootScope/infdig?p0=10&p1=%5B%5D at angular.js:38 at n.$digest (angular.js:17111) at n.$
Error: [$rootScope:infdig] http://errors.angularjs.org/1.5.5/$rootScope/infdig?p0=10&p1=%5B%5D
at angular.js:38
at n.$digest (angular.js:17111)
at n.$apply (angular.js:17337)
at angular.js:1749
at Object.invoke (angular.js:4665)
at c (angular.js:1747)
at yc (angular.js:1767)
at ee (angular.js:1652)
at angular.js:30863
at HTMLDocument.b (angular.js:3166)
angular.js:38Uncaught Error: [$rootScope:infdig] http://errors.angularjs.org/1.5.5/$rootScope/infdig?p0=10&p1=%5B%5D
at angular.js:38
at n.$digest (angular.js:17111)
at n.$apply (angular.js:17337)
at angular.js:1749
at Object.invoke (angular.js:4665)
at c (angular.js:1747)
at yc (angular.js:1767)
at ee (angular.js:1652)
at angular.js:30863
at HTMLDocument.b (angular.js:3166)
异常被抛出两次。我无法想象这意味着什么,怎么了?
这句话似乎是对问题的诅咒:
return $http.get('data/objects.json').success(function(response) {
控制器通过以下方式启动:
EspanioApp.controller('DataController', ['$http', function ($http) {...
你有什么提示我如何解决这个问题吗
cu n00n这是错误:
(无限$digest
循环)
当应用程序的模型变得不稳定,并且每个$digest
周期触发状态更改和随后的$digest
周期时,就会发生此错误。Angular检测到这种情况,并防止无限循环导致浏览器无响应
可能setRawObjects
的绑定方式不太合适
另外,我也不确定如何处理setRawObjects
返回的内容:我会验证它返回的内容,可能是一个,应该异步处理,因此直接html绑定无法正确处理它
例如,如果在控制台上打印返回,您会发现对象
是未定义的
,而响应
不是,这意味着返回在成功回调之前执行:
setRawObjects = function(){
return $http.get('data/objects.json').success(function(response) {
console.log(response);
objects = response.objects;
loaded = true;
});
}
var getObjects = function () {
console.log(loaded);
if(!loaded){
setRawObjects();
}
console.log(objects);
return objects;
};
因此,与其绑定函数,不如直接绑定对象:
MyApp.controller('DataController', ['$http', function ($http) {
var self = this;
self.objects = [];
$http.get('data/objects.json').success(function (response) {
console.log(response);
self.objects = response;
});
}]);
Angular将监视其已更新,并将更新视图。这是错误:
(无限$digest
循环)
当应用程序的模型变得不稳定,并且每个$digest
周期触发状态更改和随后的$digest
周期时,就会发生此错误。Angular检测到这种情况,并防止无限循环导致浏览器无响应
可能setRawObjects
的绑定方式不太合适
另外,我也不确定如何处理setRawObjects
返回的内容:我会验证它返回的内容,可能是一个,应该异步处理,因此直接html绑定无法正确处理它
例如,如果在控制台上打印返回,您会发现对象
是未定义的
,而响应
不是,这意味着返回在成功回调之前执行:
setRawObjects = function(){
return $http.get('data/objects.json').success(function(response) {
console.log(response);
objects = response.objects;
loaded = true;
});
}
var getObjects = function () {
console.log(loaded);
if(!loaded){
setRawObjects();
}
console.log(objects);
return objects;
};
因此,与其绑定函数,不如直接绑定对象:
MyApp.controller('DataController', ['$http', function ($http) {
var self = this;
self.objects = [];
$http.get('data/objects.json').success(function (response) {
console.log(response);
self.objects = response;
});
}]);
Angular将看到它被更新,并将更新视图。无限$digest cycle…无限$digest cycle…然后取而代之。成功也不起作用。。。。也许编辑1是个问题。希望在加载页面时加载一次json文件。@n00n我已更新了答案。我认为其中一个主要问题是,您希望同步返回异步请求的响应。。。但是返回是失败的,因为我使用了一个错误的代码示例。如果没有回报,我也会得到同样的行为deleted@n00n我添加了一个可能的解决方案..然后代替.成功也不起作用。。。。也许编辑1是个问题。希望在加载页面时加载一次json文件。@n00n我已更新了答案。我认为其中一个主要问题是,您希望同步返回异步请求的响应。。。但是返回是失败的,因为我使用了一个错误的代码示例。如果没有回报,我也会得到同样的行为deleted@n00n我添加了一个可能的解决方案。