2015-12-22 3 views
0

Я новичок в использовании AngularJS и JavaScript. После возвращения значения я получаю d. Правильно ли я вызываю функцию? Скажите, пожалуйста, что я делаю неправильно в приведенном ниже коде. Заранее спасибо. Вот мой код:Получение возвращаемого значения из функции d

 function volunteerNumbr (ProspectID){var value1; 

     console.log("volunteerNumbr[i].ProspectID",ProspectID) 
     $http.get(baseURL + 'participant/prospectid/'+ProspectID).success(function(participantData, status, headers, config){ 

      var participantData=JSON.stringify(participantData); 

      if(JSON.parse(participantData) == null){ 
       value1 = -1; 
       //console.log ("$rootScope.value1",$rootScope.value); 
      } 
      else{ 
       value1 = JSON.parse(participantData).length; 
       console.log ("$rootScope.value2",$rootScope.value); 

      } 
     }).error(function(data, status, header, config) { 
       console.log("not fecthed") 
      }); 

     console.log ("$rootScope.value3",value1); 
     return value1; 
    } 



    $http.get(baseURL + 'prospect/all/').success(function(data, status, headers, config) { 
     $scope.prospects = data; //show data on list 


     var prospect=JSON.stringify($scope.prospects); 
     var prospect=JSON.parse(prospect); 

     var prospectLength = prospect.length; 

     for(var i = 0; i < prospectLength; i++){ 

      prospect[i].num = volunteerNumbr(prospect[i].ProspectID); 


     } 
     console.log("all prospect",prospect); 



    }).error(function(data, status, header, config) {}); 
+0

'Получение возвращаемого значения функции d' могли бы вы подробнее рассказать об этом, не понимая проблему. о какой функции вы говорите? – dreamweiver

+0

значение в перспективе [i] .num показывает d каждый раз, когда цикл for выполняется, где я пытаюсь вернуть -1 или length ofData. – avi

+0

Вы не можете назначить $ http.get 'перспектива [i] .num'. Вы должны присвоить его значение, получив метод успеха. Неясно, чего вы ожидаете от своего кода, поэтому никто не сможет вам помочь. Можете ли вы расширить то, что вам нужно, или добавить больше кода? – Marie

ответ

0

$http.get() фактически возвращает вам объект обещания и не данные вы возвращаетесь внутри success(),

так что если вам нужно установить значение prospect[i].num внутри блок успеха, как показано ниже Создайте функцию, включив в нее $http.get внутри IIFE (выражение с немедленным вызовом) и передайте текущее значение индекса внутри цикла, чтобы это значение индекса содержалось для этого вызова ajax.

JS код:

$http.get(baseURL + 'prospect/all/').success(function(data, status, headers, config) { 
$scope.prospec = data; //show data on list 


var prospect=JSON.stringify($scope.prospec); 
var prospect=JSON.parse(prospect); 
//console.log("all prospect",prospect.length); 
var prospectLength = prospect.length; 

for(var i = 0; i < prospectLength; i++){ 

    // prospect[i].num = volunteerNumbr(prospect[i].ProspectID); 

     //Creating a IIFE and enclose the $http.get inside it 
     (function (index) { 
     $http.get(baseURL + 'participant/prospectid/'+prospect[i].ProspectID).success(function(participantData, status, headers, config){ 

     var participantData=JSON.stringify(participantData); 
     if(JSON.parse(participantData) == null){ 
      prospect[index].num =-1; 
      } 
     else{ 
      prospect[i].num =JSON.parse(participantData).length; 
           } 
    }).error(function(data, status, header, config) { 
      console.log("error") 
     }); 
    }(i)); 

    console.log("num",prospect[i].num); 
     } 
console.log("all prospect",prospect); 
$scope.prospects= prospect; 
console.log("all $scope.prospects",$scope.prospects); 

}).error(function(data, status, header, config) {}); 
+0

. Какой смысл в обертывании '$ http.get' в IIFE? – Marie

+0

нет гарантии, что вызовы ajax будут завершены в том же порядке, поэтому нам нужно знать, какие 'ajax' вызовы' response' должны быть сохранены в отношении того, в каком местоположении находится массив 'forward', это возможно с помощью' IIFE', поскольку значение индекса содержится в каждой анонимной функции. – dreamweiver

+0

, чтобы лучше понять этот jsfiddle и посмотреть, что происходит в консоли. http://jsfiddle.net/dreamweiver/t3kcwc7y/222/ – dreamweiver

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