search

Home  >  Q&A  >  body text

javascript - 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回调函数?

$scope里面values数组为空数组,压根就没有出现game.backup这个变量。

报错处的堆栈信息为:

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

出错提示为


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

ringa_leeringa_lee2819 days ago309

reply all(3)I'll reply

  • 阿神

    阿神2017-04-10 15:24:48

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

    reply
    0
  • PHPz

    PHPz2017-04-10 15:24:48

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

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:24:48

    明显是json格式错误

    reply
    0
  • Cancelreply