2013-05-10 4 views
0

Я пытаюсь динамически заполнять ListBox. Но он не работает с ajax-запросом.данные запроса ajax не загружаются - Angular JS

Вот что я делаю.

Мой запрос Ajax:

angular.module("confessions_module").factory("Universities",function(){ 

    var service = {}; 

     service.getUniversitiesAjax=function(callback) 
     { 
      $.ajax({ 
       type:'GET', 
       url:'myurl', 
       success:function(e) 
       { 
        universitiesList = $.parseJSON(e); 
        callback(universitiesList); 
       } 

      }); 

//    var a = [{ 'name':'asdasdsad','id':123},{ 'name':'mozi','id':123}]; 
//    callback(a) 
     } 
    return service; 
}); 

Мой контроллер вызова функции и заполнение массива:

Universities.getUniversitiesAjax(
    function(university) 
    { 

     for(var i=0;i<university.length;i++) 
     { 
      var unii = { 'name' : university[i].name , 'id' : university[i].id }; 
      $scope.unis.push(unii); 
     } 
    } 
); 

Мой Вид:

    <select id="dd_universities"> 
         <option ng-repeat="uni in unis">{{uni.name}}</option> 
        </select> 

В настоящее время существуют две линии комментировал в My Ajax Request код. Когда я uncomment эти две строки, мои данные заполняются без проблем. Но всякий раз, когда я пытаюсь заполнить его, используя код запроса ajax, как это происходит сейчас. Это не работает. В чем может быть проблема ?

+1

вы должны использовать $ http вместо $ .ajax, иначе вы можете столкнуться с некоторыми проблемами –

+0

$ http предоставляется угловым? – Mj1992

+0

Да, это инъекционная услуга, и тогда вы можете просто «$ http.get (« myurl »). Success (function() {})' Самое большое преимущество этого состоит в том, что ответы перевариваются внутри угловой структуры, 'нужно использовать '$ scope. $ apply()'. http://docs.angularjs.org/api/ng.$http –

ответ

2

Вашего AJAX обратного вызов выполняются «вне» Угловой, так что даже если вы меняете свои свойства Области применения:

$scope.unis.push(unii); 

Угловые не заметят эти изменения. Позвоните по телефону $scope.$apply() после вашего цикла for. Это заставит Angular запускать digest cycle, который будет замечать ваши изменения и обновлять ваши представления.

Смежные вопросы