$ http.get在成功时不执行函数

时间:2016-02-17 06:20:50

标签: angularjs function http ionic-framework

我正在做我的第一个Angular项目(离子框架),我必须从数据库中获取一些数据,并且我必须

  1. 将其存储在变量

  2. 导航到使用此变量的页面。

  3. 页面正在导航,但不会发送数据。

    以下是我的 search.html 代码:

    <body ng-app="starter" ng-controller="ListCtrl">
    <ion-pane>
        <ion-header-bar class="bar-stable">
            <h1 class="title">Real Estate</h1>
        </ion-header-bar>
        <ion-content>
            <h4 align="center"> Enter Place or Pincode </h4>
            <div class="list list-inset" >
                <label class="item item-input">
                    <input type="text" name="place" ng-model="data.place" value="" placeholder="Place"  ng-focus="$scope.placefocus=true;data.pincode=null" ng-blur="$scope.placefocus=false" ng-disabled = "$scope.pincodefocus">
               </label>
               <label class="item item-input">
                   <input type="number" name="pincode" ng-model="data.pincode" value="" placeholder="Pin Code" ng-focus="$scope.pincodefocus=true;data.place=null" ng-blur="$scope.pincodefocus=false" ng-disabled="$scope.placefocus">
               </label>
           </div>
           <button class="button button-block button-positive"  ng-click="getdata()">
               Search
           </button>
       </ion-content>
    </ion-pane>
    </body>
    

    这是我的控制器代码:

    app.controller('ListCtrl',function($scope,$http,$location,$window){
    $scope.data = {};
    $scope.getdata = function(){
        //alert($scope.data.place);
        $http.get("http://localhost/angular/data.php")  
                                                          //,{'place':$scope.data.place,'pincode':$scope.data.pincode})
            .success(function(response,status,headers,config){
                alert(response);
                $scope.datas=response;
                $scope.navig('/show.html');
            })
    }
    $scope.navig = function(url){
        $window.location.href=url;
    };
    });
    

    这是我的 show.html 页面:

    <ion-content>
    <div class="list card" ng-repeat="site in datas">
    <div class="item item-body">
        <a href="#" class="subdued"><img class="full-image" src="img/{{site.image}}" height="150px">
            <p>
                RS.{{site.price}} &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp <span> {{site.square_feet}} sq.ft &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp</span><span>{{site.bed}} BHK</span>
            </p>
        </a>
    </div>
    </div>
    </ion-content>
    
    控制器代码警告alert(response)中的

    [object Object],[object Object],[object Object] 但是输出页面(show.html)是空白的

    如果我直接通过按钮单击(在search.html中)而不是navig("/show.html")来调用getdata()并将控制器代码更改为下面的那个,我得到结果:(但我无法执行这样,因为我必须从数据库获取特定地点的数据并输入密码

    app.controller('ListCtrl',function($scope,$http,$location,$window){
        $scope.data = {};
        $http.get("http://localhost/angular/data.php")
                                                      //,{'place':$scope.data.place,'pincode':$scope.data.pincode})
            .success(function(response,status,headers,config){
                alert(response);
                $scope.datas=response;
            })
        $scope.navig = function(url){
            $window.location.href=url;
        };
    });
    

3 个答案:

答案 0 :(得分:1)

请勿使用成功功能,请使用.then()功能。以下代码来自角度文档。

$http({
  method: 'GET',
  url: '/someUrl'
}).then(function successCallback(response) {
    // this callback will be called asynchronously
    // when the response is available
  }, function errorCallback(response) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

以下是Documentation

中的文字
  

弃用通知

     

$ http遗留承诺方法成功与错误   弃用。请改用标准方法。如果   $ httpProvider.useLegacyPromiseExtensions设置为false然后这些   方法将抛出$ http / legacy错误。

答案 1 :(得分:0)

$ scope仅适用于控制器!而不是$ scope使用$ rootScope。

答案 2 :(得分:0)

这可能是承诺。 为什么不试试这个。

 app.controller('ListCtrl',function($scope,$http,$location,$window){
        $scope.data = {};
        $http.get("http://localhost/angular/data.php")
                                                      //,{'place':$scope.data.place,'pincode':$scope.data.pincode})
            .then(function(response){
                alert(response);
                $scope.datas=response;
            })
        $scope.navig = function(url){
            $window.location.href=url;
        };
    });