ТипError: dbg undefined в angularjs

Я изучаю angularjs и следующий учебник - здесь

Вот мой 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';
    });

но на следующем шаге я попытался извлечь эти json-данные с помощью ajax-вызова, поэтому контроллер выглядит так:

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 undefined. debuggerLib.js(строка 530)

Я вижу в firebug вызов ajax происходит с кодом 304 Not Modified. и я могу видеть данные в ответ. но тип содержимого ответа не является json.

Пожалуйста, изучите его и скажите, в чем проблема? Мне не хватает любого js файла для включения или что-то еще.

Ответ 1

У меня была такая же ошибка, и после того, как некоторые царапины головы обнаружили причину. Я не могу быть уверен, является ли это вашей же причиной.

Перезапуск Firefox, перезагрузка ПК, удаление Firebug, переустановка, оптимизация, запуск реестра и т.д. - ничего не помогло. Я получил ошибку в строке debugerLib.js 556, dbg undefined.

Однако, оказалось, что я установил Firebug еще в те дни, и он создал каталог в моем профиле Роуминга:

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

В этом каталоге много файлов JSON, но ни один из них не был установлен сегодня, когда я удалил и переустановил Firebug. Поэтому я подумал: "Что, если новый Firebug загрузит что-то устаревшее из этого каталога?".

Я закрыл Firefox, переименовал каталог из "firebug" в "bugfire", снова открыл Firefox.

Firebug работает отлично, и ошибка исчезла. Я сделал то же самое без переименования каталога, и ошибка не исчезла, поэтому я уверен, что моя гипотеза верна.

Каталог был заново создан, но теперь есть только два файла - "annotations.json" и "breakpoints.json", размер которых равен 0 байтам. Возможно, однажды я попробую добавить файлы из старого каталога, чтобы увидеть, когда возвращается ошибка.

Обновление (благодаря комментарию DevNull)

Возможно, нет необходимости уничтожать весь каталог. Убедитесь, что файл annotations.json имеет нулевую длину. Если это не так, просто переименуйте его в annotations.old, пока Firefox не запущен.


Я начинаю подозревать, что dbg фактически отлаживает Firebug сам, и мы его не определяем, потому что мы не разработчики Firebug. Он не имеет ничего общего с отладчиком Firebug, который отлаживает наши скрипты.

Ответ 2

Вероятно, вы используете FireFox с включенным firebug.
Выключите firebug, и ваша проблема исчезнет.

У меня была та же проблема, у других браузеров не было проблем, и консоль показала ошибку, исходящую от debuggerLib.js (строка 556). Деактивация удаляла ошибку и позволяла моему приложению работать как ожидалось.

Ответ 3

используйте этот код html head tag.

  <base href="/">

....

Ответ 4

Попробуйте это, Сначала инициализировать значение массива JSON - это empty.so инициализировать

    $scope.phones = '';

Ответ 5

Объяснение @LSerni кажется правильным. Для системы Linux просто удалите и переустановите плагин Firebug. Система автоматически удаляет все связанные файлы/папки и воссоздает их. Это сработало для меня.

Ответ 6

Ошибка, которую вы имеете, связана с вашим файлом 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
        }]

Помните квадратные скобки.

Используйте затем, а не .success. Это улучшенная версия .success, позволяющая более эффективно обрабатывать все обратные вызовы и вызовы. Он возвращает все обещание, и вы разрешаете его, ссылаясь на часть .data, т.е. Response.data​​p >

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

DEMO - Использование .success

DEMO - использование обещания.

Ответ 7

Вы используете номер, поэтому, пожалуйста, используйте номер или значение синтаксиса для примера ниже.

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

Ответ 8

для меня проблема заключалась в том, что я забыл определить в контроллере библиотеку

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