directive中的$http请求返回正确但不执行success回调函数还报错

在自定义的directive的controller里面,用$http获取了一个game.json,然后赋值给这个directive的一个成员变量。出错了。
在debug中看到获取的game.json文件是对的,但查看$scope下面该directive下被赋值的变量,是一个空数组。

$http.get('/game.json').success(function (data) {
                        console.log('enter success callback');
                        game.backup = data;//backup 不与前端绑定,只备份数据
                        game.reload();//得到数据后给game赋初值
                    });

上面的console.log没有在控制台打印出来,也就是没能进入success回调函数。
其中game.reload()是用来把game.backup拷贝一份给game.values的,game.values也就是最下面一张图里面为空的那个数组

                this.reload = function (n) {
                    if(n===undefined){
                        game.values = angular.copy(game.backup);//得到数据后给game赋初值
                        console.log("updated all levels");
                    }
                    else{
                        game.values[n] = angular.copy(game.backup[n]);
                        console.log("updated level "+n);
                    }
                };

看请求的返回(下图),似乎没有错。
为什么没有进入success回调函数?
clipboard.png
$scope里面values数组为空数组,压根就没有出现game.backup这个变量。
clipboard.png

报错处的堆栈信息为:

(anonymous function)
$get
processQueue 
(anonymous function) 
$get.Scope.$eval 
$get.Scope.$digest 
$get.Scope.$apply 
done 
completeRequest 
requestLoaded

出错提示为

clipboard.png
加上error回调函数之后,发现执行了error回调,获取的四个参数为

clipboard.png

阅读 4.7k
3 个回答

这个像是JSON parse 出错了,你把你的JSON字符串检查一下,用原生的JSON.parse转化一下,看会不会出错

从提示看是解析的问题,是否跨域了?用JSONP试试。

新手上路,请多包涵

明显是json格式错误

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题