0

AngularJS: 1.4.x
Сценарий 1: отлично работает
Сценарий 2: Выдает ошибку 404 на линии xhr.send (isUndefined (пост) нуль: пост); in angular.jsRest Webservice вызов в AngularJS (обещание)

Я пытаюсь добавить встроенный угловой кеш в наше существующее приложение. Как я упоминал в сценарии 1, мы потребляем вызов отдыха на фабрике «restFactory» и вводим фабрику в контроллер «bookController», обещание разрешены и загружены данные.

Фабрика: restFactory

(function() { 
    "use strict"; 
    angular.module('myApp').factory("restFactory",['$http','confi', function($http,config){ 

    function getBooks(){ 
     return $http.get(config.serverName+"bookshelf/rest/books/data/geRestBooks"); 
    } 
    return { 
     getBooks : getBooks 
    }; 
}]); 
})(); 

Контроллер: BookController

$scope.getComicbooks = function() { 
     restFactory.getBooks().then(function(response) {   
      $scope.names = response.data; 
     }, function(error) { 
      $scope.error = error; 
      $scope.names = []; 
     }); 
    }; 

Сейчас в сценарии 2, я изменил вызов службы на заводе-изготовителе на объект с большим количеством деталей. Но я получаю исключение из контроллера при решении обещания (я только добавил измененный код)

function getBooks(){ 
    return $http.get({ 
    cache: true, 
    method: 'GET', 
    url : config.serverName+"bookshelf/rest/books/data/geRestBooks" 
    }); 
} 

ОШИБКА: angular.js: 10765 ПОЛУЧИТЬ http://127.0.0.1:53814/views/[object%20Object] 404 (Not Found)

Network Tab:
enter image description here в сценарии # 1 это был бы вызов метода getBooks

+1

Где вы звоните http://127.0.0.1:53814/views/? –

+0

@AdamWolski: Я использую 'bookController' на индексной странице, которая находится в каталоге представлений, но я, когда я добавил console.log, разбивается, прежде чем он решает' restFactory.getBooks(). Then (function (response) {'. –

+0

Что делать вы видите на вкладке сети для этого запроса? –

ответ

3

Если вы собираетесь указать метод, то вы должны просто использовать метод $http конструктора, а не метод get.

Вместо

function getBooks(){ 
    return $http.get({ 
     cache: true, 
     method: 'GET', 
     url : config.serverName+"bookshelf/rest/books/data/geRestBooks" 
    }); 
} 

Попробуйте

function getBooks(){ 
    return $http({ 
     cache: true, 
     method: 'GET', 
     url : config.serverName+"bookshelf/rest/books/data/geRestBooks" 
    }); 
} 
+1

Превосходный улов! Причина, по которой код OP не работает, заключается в том, что ['$ http.get'] (https://docs.angularjs.org/api/ng/service/$ http # get) ожидает, что первым аргументом будет строка URL. Поскольку OP передает объект, они получают строчную версию объекта, то есть '[object Object]' – Phil

+2

В качестве альтернативы OP может использовать '$ http.get (config.serverName +" bookshelf/rest/books/data/geRestBooks ", {cache: true}) ' – Phil

+0

@Phil - Я действительно предпочел ваше предложение и собирался упомянуть об этом, но решил, что я должен помочь решить проблему, поскольку я был наказан за предложение альтернатив раньше. – GPicazo

Смежные вопросы