【问题标题】:Rest Webservice call in AngularJS ( promise )AngularJS 中的 Rest Webservice 调用(promise)
【发布时间】:2017-06-08 13:19:57
【问题描述】:

AngularJS:1.4.X
场景 1:工作正常
场景 2:在行 xhr.send(isUndefined(post) ? null : post); 上引发 404 错误在 angular.js 中

我正在尝试将内置角度缓存添加到我们现有的应用程序中,正如我在场景 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 GET http://127.0.0.1:53814/views/[object%20Object] 404(未找到)

网络标签:
在场景#1 中,这将是一个方法调用 getBooks

【问题讨论】:

  • 你在哪里打电话127.0.0.1:53814/views
  • @AdamWolski:我在视图目录中的索引页面中使用bookController,但是当我添加console.log 时它在解析restFactory.getBooks().then(function(response) { 之前中断。
  • 您在该请求的网络选项卡中看到了什么?
  • @AmyBlankenship:更新
  • 您的网址在这里甚至都不匹配。第一个例子有config.serverName+"bookshelf/rest/books/data/geRestBooks",而第二个例子有config.serverName+"bookshelf/rest/books/data/getBooks"

标签: angularjs rest angularjs-controller angularjs-factory angularjs-http


【解决方案1】:

如果你要指定方法,那么你应该只使用$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"
   });
}

【讨论】:

  • 出色的收获! OP 代码失败的原因是 $http.get 期望第一个参数是 URL 字符串。由于 OP 正在传递一个对象,所以他们得到一个对象的字符串版本,即[object Object]
  • 或者,OP 可以使用$http.get(config.serverName+"bookshelf/rest/books/data/geRestBooks", { cache: true })
  • @Phil - 我实际上更喜欢你的建议,并打算提及它,但我认为我应该坚持帮助解决问题,因为我之前曾因提出替代方案而受到处罚。
  • 这几乎不是替代品。在内部,$http.get 只是代理到$httpmethod 预设和url 从第一个参数添加。随时将其添加到您的答案中:)
猜你喜欢
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多