javascript - 我试图从 Angular js 中的 http 请求返回一些数据,但它给出了一个未定义的

标签 javascript php angularjs

这是 Angular js 的 Controller ,它调用服务来获取酒店

   vm.getTopHotels =  function(){
         var hotelsLimit =  10;
         var top_hotels = 
         dataService.getHotels()
          .then(function(hotels){
             console.log('adf');
              sortHotels = commonMethods.sortHotels(hotels.data.data,'Rating','SORT_DESC'); 
              hotelDetailsCheck = checkDetailsIfExists(sortHotels);
              //Get only top 10 hotels for home page
              top_hotels =  hotelDetailsCheck.slice(0,10);
              vm.topHotels =  top_hotels;
          },
          function(data){
              console.log('Failed to get Hotels');
          }); 
     };

     vm.getTopHotels();

** 这是调用 Http get 请求来获取数据的 dataService,但在 Controller 中,它给了我未定义的信息,所以 datsService 返回方法是否有问题,因为我认为它没有返回 **

(function(){  
    angular
       .module('app')
       .factory('dataService',DataFactory);

       DataFactory.$inject = ['$http','$q']

       function DataFactory($http,$q){
          var service = {
              hotels:[],
              getHotels:getHotels,
              saveHotels:saveHotels
          };
           return service;

          function saveHotels(){
            var def = $q.defer();
             $http.get('/hotels/saveHotelsData')
              .then(function successCallback(data){
                    def.resolve(data);
               },function errorCallback(data){
                  def.reject('Something went down :(');
               });
               return def.promise;
          }

         function getHotels(){
            // var def = $q.defer();

           return  $http.get('/hotels/getHotelsData')
               .then(function successCallback(data){
                   service.hotels = data;
                });


          }


       }

})();

最佳答案

// ...
.then(function(data) {
    console.log('adf');
    sortHotels = commonMethods.sortHotels(hotels.data.data,'Rating','SORT_DESC'); 

什么是酒店?它没有在任何地方声明。如果 hotels 应该是 API 的响应,那么它应该这样声明:

.then(function(hotels) {
    console.log('adf');
    sortHotels = commonMethods.sortHotels(hotels.data.data,'Rating','SORT_DESC'); 

更新:您的 getHotels 通过没有 return 语句的函数传递结果,因此将解析为未定义。应该是

         function getHotels(){
           return  $http.get('/hotels/getHotelsData')
               .then(function successCallback(data) {
                   service.hotels = data;
                   return data;
                });
          }

关于javascript - 我试图从 Angular js 中的 http 请求返回一些数据,但它给出了一个未定义的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57987214/

相关文章:

php - 如何在 PHP 或 SQL 中执行因子分析?

php - 为什么 ng-repeat 在自动递增 id 时表现得很奇怪?

javascript - 将 JSON 项插入现有数组 angularjs

angularjs - 语法错误 : Token ':' is an unexpected token when passing variable to directive

javascript - jQuery 变量选择器不适用于 find()

PHP+AJAX 与 MySQL - 每 2 秒查询一次,在 TIME_WAIT 中太多

javascript - 加载 HTML 页面而不等待某些部分加载

php - 动态获取 PHP 类命名空间

javascript - 如何使用 Javascript 创建带有动态信息的模式?

javascript - 如果使用 CSS3 翻译/转换来更改元素位置,则不会触发 Mouseenter/Mouseover 事件