2015-05-05 3 views
1

Я пытаюсь заполнить массив в javascript данными, полученными из базы данных в PHP. Я сталкиваюсь с проблемами, поскольку массив не зацикливается и кажется пустым после запуска запроса.Сравнить значение в ng-repeat с значением php

Вот мой код:

PHP

public function getAllFavorites() { 
     $json = array(); 
     $query = $this -> db -> get("favorites"); 
     $count = $query -> num_rows(); 
     foreach ($query -> result() as $row) { 
      array_push($json, $row -> product_id); 
     } 
     echo json_encode($json); 
    } 

JAVASCRIPT

app.controller("MainController", function($scope, $http){ 
    $scope.favorites = getAllFavorites(); 
}); 
var getAllFavorites = function() { 
    $.get("/home/getAllFavoriteIds", function(response){ 
     return response; 
    }); 
} 

HTML

<div ng-controller="MainController"> 
<ul> 
    <li ng-repeat="favorite in favorites">{{favorite}}</li> 
</ul> 
</div> 

Все, что я пытаюсь сделать, это заполнить $ scope.favorites с массив вернулся из m мой PHP, а затем выполните цикл с помощью ng-repeat.

+0

Вы должны использовать '$ http', или привязки данных сломаются. В частности, что-то вроде '$ http.get («/home/getAllFavoriteIds »)' и в обратном вызове успеха вы должны установить '$ scope.favorites = response.data' –

+0

Невозможно вернуться с обратного вызова ajax в первую очередь. Ваша внешняя функция 'getAllFavorites' ничего не возвращает – charlietfl

ответ

1

У вас возникла проблема с вашим JS. Ваш код ожидает синхронного возврата данных от getAllFavorites(), но эта функция ничего не возвращает. Используйте $ http, чтобы сделать свой звонок, и он даст вам обещание. Вы можете использовать это обещание, чтобы ответить, когда клиент получает данные.

app.controller("MainController", function($scope, $http){ 
    var getAllFavorites = function() { 
     return $http.get("/home/getAllFavoriteIds"); // This should really be done in a service 
    }; 

    getAllFavorites().then(function(response){ 
     $scope.favorites = response.data; 
    }); 
});