【问题标题】:TypeError: dbg is undefined in angularjsTypeError:dbg在angularjs中未定义
【发布时间】:2015-01-26 20:23:02
【问题描述】:

我正在学习 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';
});

但这给了我以下错误 -

类型错误:dbg 未定义。 debuggerLib.js(第 530 行)

我可以在 firebug 中看到 ajax 调用发生在代码 304 Not Modified 的情况下。我可以看到响应的数据。但响应内容类型不是 json。

请检查一下并说出问题所在?我是否缺少要包含的任何 js 文件或其他内容。

【问题讨论】:

  • 您的萤火虫安装是否可能以某种方式搞砸了?我认为debuggerLib.js 是萤火虫的文件。在任何情况下,在一个名为 that 的文件中,有一行代码试图在名为 dbg 的变量上调用一些代码,该变量在代码中该点不存在。找出该文件对应的内容,您应该会找到答案。
  • 尝试在 Chrome 中重现同样的错误。如果不重复,萤火虫就是罪魁祸首。
  • 我刚刚在我正在处理的项目中遇到了这个问题,但是我的 javascript 代码在我的 $http.get 函数内部有一个错误,一旦纠正,就不会再抛出这个错误了。我在您的代码中没有看到任何彻底的错误,但也许可以尝试注释掉代码,直到您找到导致错误的行。
  • 我也有这个问题。这真的很烦人,因为它使得使用 firebug 调试 Angular 变得非常困难。它发生在某些 Angular 错误中并掩盖了真正的问题。抱歉,我也没有解决办法。
  • @rgimmy 这对我来说也是如此。我的脚本中有一些错误,我收到了这个愚蠢的错误。一旦我纠正了问题,这个错误就消失了。

标签: html angularjs ajax


【解决方案1】:

您正在使用数字,因此请使用数字或将值解析为下面的数字示例。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      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 
      

      【讨论】:

      • 我不明白消极点,你应该说一个原因,以便我可以解决它
      【解决方案4】:

      试试这个, 首先初始化JSON数组值为空。所以初始化

          $scope.phones = '';
      

      【讨论】:

        【解决方案5】:

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

        我遇到了同样的问题,其他浏览器没有问题,控制台显示来自debuggerLib.js 的错误(第 556 行)。停用它可以消除错误并让我的应用程序按预期运行。

        【讨论】:

          【解决方案6】:

          我也遇到过同样的错误,经过一番摸索后发现一个原因。我不能确定这是否是你的同样的原因。

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

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

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

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

          我关闭了 Firefox,将目录从“firebug”重命名为“bugfire”,然后重新打开了 Firefox。

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

          目录已重新创建,但现在只有两个文件 - “annotations.json”和“breakpoints.json”,大小均为 0 字节。可能有一天我会尝试从旧目录中添加文件,以查看错误何时出现。

          更新(感谢 DevNull 的评论)

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


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

          【讨论】:

          • 你拯救了我的一天(以及我的 Fx 个人资料 ^^ 我认为它是 Fx 内部的,也许是这个更新的 Fx 49……不)。查找与 2012-2015 项目相关的 150 kB 的 170 kB JSON 文件,您是否忘记了 Firebug?编辑:等等,问题来自 2014 年,但你昨天的回答?我想念一些东西
          • 嗯,是的。一旦我的萤火虫运行成功,我首先查看的是 Stack Overflow。不幸的是,这里的答案都没有帮助我。当我发现在我的情况是一个解决方案时,我发布了它,以防其他人有相同的症状和相同的原因。很高兴看到它起作用:-)。不幸的是,这类事情有很多因素,以至于相同的症状(“它不起作用!”)可能实际上取决于 anything,您可以有 20 个答案,并且所有答案都对 某人。或者您可能需要同时测试两个或三个答案。
          • 我认为这可能是一个错误的注释文件。你的解决方案奏效了。所以我停止了 ff 并复制到我的旧断点文件中,仍然有效。停止并复制到注释文件中,突然又回来了同样的错误。
          • 你是对的。我的旧注释文件 not 长度为零,而我的新文件是。我无法对其内容做出正面或反面,但我可能会在某个时候调查它:-)
          • 疯了这是昨天发生在我身上的事情,所以我按照你的建议修复了它,并发现了注释文件的事情。巴姆,今晚又遇到问题了。 /叽/。现在我只是停止 firefox,rm -f 文件(我在 linux 上),然后再次启动 firefox。希望这不会成为 Firefox 的(坏)习惯。
          【解决方案7】:

          您遇到的错误与您的 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

          【讨论】:

            【解决方案8】:

            使用这段代码的 html 头标签。

              <base href="/">
            

            ....

            【讨论】:

              猜你喜欢
              • 2014-04-08
              • 2015-10-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-05-28
              • 2015-08-26
              相关资源
              最近更新 更多