Angularjs使用和不使用http

时间:2015-07-23 10:24:34

标签: php json angularjs autocomplete

在我的代码中,我使用angular(material)自动完成,我需要从外部php文件中获取数据。

HTML:

<div ng-controller="search_interest" layout="column">
  <md-content class="md-padding" layout="column">

      <md-autocomplete 
        md-selected-item="selectedItem" 
        md-search-text="searchText" 
        md-items="item in getInterest1(searchText)" 
        md-item-text="item.name" 
        placeholder="Search for a vegetable">
        <span md-highlight-text="searchText">{{item.name}} :: {{item.type}}</span>
      </md-autocomplete>

  </div>

当我返回“手工制作”的JSON时,自动完成效果很好:

//RETURN: results [{"name":"Broccoli","type":"Brassica"}]
    $scope.getInterest1 = function() {
      var results = [
        {
          'name': 'Broccoli',
          'type': 'Brassica'
        }];
        console.log('results', JSON.stringify(results));
        return results;
        };

但是当我使用$ http.get调用相同的JSON时,它不会显示自动完成的结果,也没有任何事情发生。

//RETURN: results [{"name":"Broccoli","type":"Brassica"}]
    $scope.getInterest2 = function() {
      $http.get("../inc/users/search_interest.php?query=" + $scope.searchText)
        .success(function(results) {
          //$scope.interest = results;
          console.log('results', JSON.stringify(results));
          return results.data;
        });
    };

但我可以在控制台中看到结果是平等的。

在我的php文件(由$ http.get调用)中,我使用json-encode返回JSON:

$row_set = array('name' => 'Broccoli', 'type'=> 'Brassica');
echo json_encode(array($row_set));

也许php json_encode会返回一个糟糕的json形式?

由于

1 个答案:

答案 0 :(得分:2)

确定。刚用承诺解决了我的问题。 在控制器中我宣布$ q

function($scope, $http, $q)
{
    $scope.searchText = '';
    $scope.selectedItem = undefined;
    $scope.selectedInterest = [];

    var deferred = $q.defer();

在功能中我使用了$ q:

$scope.getInterest2 = function() {
      $http.get("../inc/users/search_interest.php?query=" + $scope.searchText)
        .success(function(results) {
          //$scope.interest = results;
          console.log('results', JSON.stringify(results));
          alert(results.name);
          deferred.resolve(results);
        });
        return deferred.promise;
    };

谢谢!