2013-11-15 9 views
8

मैं अभी भी कोणीय जेएस सीख रहा हूं और यह नियंत्रक है जो विभिन्न पैरामीटर का उपयोग करके lastfm api को दो AJAX अनुरोध कर रहा है। मैं जानना चाहता हूं कि प्रत्येक अनुरोध कब समाप्त हो गया है, ताकि मैं दोनों अनुरोधों के लिए लोडिंग सूचक प्रदर्शित कर सकूं। मैंने इसका शोध किया है और वादे और $ क्यू सेवा के बारे में पढ़ा है, लेकिन इस बारे में मेरे सिर को इस बारे में कैसे प्राप्त नहीं किया जा सकता है। क्या इसे स्थापित करने का कोई बेहतर तरीका है? और जब मैं प्रत्येक अनुरोध किया जाता है तो मुझे कैसे पता चलेगा। धन्यवाद।Angularjs एकाधिक AJAX अनुरोध अनुकूलन

angular.module('lastfm') 

.controller('ProfileCtrl', function ($scope, ajaxData, usersSharedInformation, $routeParams) { 

    var username = $routeParams.user; 

    //Get Recent tracks 
    ajaxData.get({ 
     method: 'user.getrecenttracks', 
     api_key: 'key would go here', 
     limit: 20, 
     user: username, 
     format: 'json' 
    }) 

    .then(function (response) { 

     //Check reponse for error message 
     if (response.data.message) { 
      $scope.error = response.data.message; 
     } else { 
      $scope.songs = response.data.recenttracks.track; 
     } 

    }); 

    //Get user info 
    ajaxData.get({ 
     method: 'user.getInfo', 
     api_key: 'key would go here', 
     limit: 20, 
     user: username, 
     format: 'json' 
    }) 

    .then(function (response) { 

     //Check reponse for error message 
     if (response.data.message) { 
      $scope.error = response.data.message; 
     } else { 
      $scope.user = response.data.user; 
     } 

    }); 
}); 

मैं इस कारखाने जो $q.all() का उपयोग कर सभी अनुरोधों

angular.module('lastfm') 

.factory('ajaxData', function ($http, $q) { 

return { 
    get: function (params) { 
     return $http.get('http://ws.audioscrobbler.com/2.0/', { 
      params : params 
     }); 
    } 
} 

}); 

उत्तर

16

काफी आसान संभालती है। $http अपने आप में एक वादा वापस आती है और $q.all() का समाधान नहीं होगा जब तक वादों की एक सरणी

हल कर रहे हैं
var ajax1=ajaxData.get(....).then(....); 
var ajax2=ajaxData.get(....).then(....); 

$q.all([ajax1,ajax2]).then(function(){ 
    /* all done, hide loader*/ 
}) 
+0

आह बहुत बहुत शुक्रिया, समझ में आता है – Allan

+5

खुशी है कि यह आप के लिए काम किया है ... 10 महीने बाद – charlietfl