TypeError:在angularjs中未定义dbg

时间:2014-11-28 07:53:28

标签: html angularjs ajax

我正在学习angularjs并遵循 - here

的教程

这是我的index.jsp -

<!doctype html>
<html lang="en" ng-app="phoneCatApp">
<head>
<title>Angular Example</title>
<script type="text/javascript" src="angular/angular.min.js"></script>
<script type="text/javascript" src="app/js/controllers.js"></script>
</head>
<body ng-controller="phoneListCtrl">
    Search : -
    <input ng-model="query"/> Sort by:
    <select ng-model="orderProp">
        <option value="name">Alphabetical</option>
        <option value="age">Newest</option>
        <option value="-age">Oldest</option>
    </select>
    <p>Total number of phones: {{phones.length}}</p>
    <ul>
        <li ng-repeat="phone in phones | filter:query | orderBy:orderProp"><span>{{phone.name}}</span>
            <p>{{phone.snippet}}</p></li>
    </ul>
</body>
</html>

此版本的controller.js有效 -

var phonecatApp = angular.module('phoneCatApp', []);
    phonecatApp.controller('phoneListCtrlOld', function($scope) {
        $scope.phones = [ {
            'name' : 'Nexus S',
            'snippet' : 'Fast just got faster with Nexus S.',
            'age' : 1
        }, {
            'name' : 'Motorola XOOM™ with Wi-Fi',
            'snippet' : 'The Next, Next Generation tablet.',
            'age' : 2
        }, {
            'name' : 'MOTOROLA XOOM™',
            'snippet' : 'The Next, Next Generation tablet.',
            'age' : 3
        } ];
        $scope.orderProp = 'age';
    });

但在下一步中,我尝试使用ajax调用获取此json数据,因此控制器看起来像这样 -

var phonecatApp = angular.module('phoneCatApp', []);
phonecatApp.controller('phoneListCtrl', function($scope, $http) {
    $http.get('app/js/phones.json').success(function(data) {
        $scope.phones = data;
    });
    $scope.orderProp = 'age';
});

但是这给了我以下错误 -

TypeError:dbg未定义。 debuggerLib.js(第530行)

我可以在firebug中看到ajax调用正在发生,代码为304 Not Modified。我可以看到数据作为回应。但响应内容类型不是json。

请仔细研究并说明问题是什么?我错过了要包含的任何js文件或其他内容。

8 个答案:

答案 0 :(得分:11)

我遇到了同样的错误,经过一些头脑刮擦后发现 a 原因。我无法确定这是否是你的同样的原因。

重新启动Firefox,重新启动PC,删除Firebug,重新安装,优化,运行注册表清理等等 - 没有任何帮助。我在debuggerLib.js第556行遇到错误,dbg未定义。

然而,事实证明我已经安装了Firebug,它在我的漫游配置文件中创建了一个目录:

C:\Users\Leonardo\AppData\Roaming\Mozilla\Firefox\Profiles\Leonardo.Serni\firebug

在该目录中有很多JSON文件,但今天没有一个日期,这是我删除并重新安装Firebug的时候。所以我想知道,&#34;如果 new Firebug正在从这个目录中加载过时的东西怎么办?&#34;。

我关闭了Firefox,重新命名了&#34; firebug&#34;到&#34; bugfire&#34;,重新打开Firefox。

Firebug运行正常且错误已消失。我在没有重命名目录的情况下做了同样的事情并且错误没有消失,所以我确信我的假设是正确的。

目录已经重新创建,但现在只有两个文件 - &#34; annotations.json&#34;和&#34; breakpoints.json&#34;,都是0字节大小。可能有一天我会尝试添加旧目录中的文件以查看错误何时返回。

更新(感谢DevNull的评论)

可能没有必要核对整个目录。验证annotations.json文件的长度是否为零。如果不是,请在Firefox未运行时将其重命名为annotations.old

我开始怀疑dbg实际上是调试Firebug本身,我们没有定义它,因为我们不是Firebug开发人员。它与调试我们的脚本的Firebug调试器无关。

答案 1 :(得分:3)

你可能正在使用FireFox激活了firebug 关掉萤火虫,你的问题就会消失。

我有同样的问题,其他浏览器没有问题,控制台显示错误来自debuggerLib.js(第556行)。取消激活它会删除错误并允许我的应用程序按预期运行。

答案 2 :(得分:1)

使用此代码html head标记。

  <base href="/">

...

答案 3 :(得分:1)

试试这个, 首先初始化JSON数组值是一个empty.so initialize

    $scope.phones = '';

答案 4 :(得分:1)

@LSerni的解释似乎是正确的。 对于Linux系统,只需删除并重新安装Firebug插件即可。系统会自动删除所有相关文件/文件夹并重新创建它。 这对我有用。

答案 5 :(得分:0)

您遇到的错误是您的JSON文件。它应该是这样的:

       [{
            "name" : "Nexus S",
            "snippet" : "Fast just got faster with Nexus S.",
            "age" : 1
        }, {
            "name" : "Motorola XOOM™ with Wi-Fi",
            "snippet" : "The Next, Next Generation tablet.",
            "age" : 2
        }, {
            "name" : "MOTOROLA XOOM™",
            "snippet" : "The Next, Next Generation tablet.",
            "age" : 3
        }]

记住方括号。

使用 .then 而不是.success。这是.success的改进版本,可以更有效地处理所有回调和调用。它会带回整个承诺,并通过引用.data部分即response.data

来解决它
$http.get('app/js/phones.json').then(function(response) {
        $scope.phones = response.data;
    });

DEMO - Using .success

DEMO - Using .then promise

答案 6 :(得分:0)

您正在使用该号码,请使用数字或解析值来编号如下。

<code>
   var myApp = angular.module('MyApp',[]);
    myApp.controller("myController",function($scope){
        $scope.width=50;
        $scope.height=50;
    });
</code>

答案 7 :(得分:-1)

对我来说问题是我忘了在控制器中定义库

app.controller("MyCtrl", function($scope, $http) {  //<- here $timeout was missing 

  $http.get(someUrl)
    .then(function(myResponse) {
        $scope.myData = myResponse.data;

        $timeout(function() {               //<- here $timeout was called  without being defined
            enableWatchers = true; 
        });
  });
});

在我将代码的第一行更改为:

后,它才有效
app.controller("MyCtrl", function($scope, $http, $timeout) {  //<- here I put the $timeout