AngularJS $http requête ajax n'est pas asynchrone et les causes de la page d'accrocher
J'ai un service où je suis de l'extraction de données à partir du serveur. Quand je clique sur le bouton pour envoyer la requête au serveur par le biais de ce service, la fenêtre se fige jusqu'à ce que je reçois une réponse du serveur. Est-ce que je peux faire pour faire cette demande asynchrone ?
Voici mon service.
app.factory('service', function($http) {
return {
getLogData : function(startTime,endTime){
return $http({
url: baseURL + 'getLogData',
method: 'GET',
async: true,
cache: false,
headers: {'Accept': 'application/json', 'Pragma': 'no-cache'},
params: {'startTime': startTime , 'endTime': endTime}
});
}
};
)};
HTML.
<button ng-click="getData()">Refresh</button>
<img src="pending.gif" ng-show="dataPending" />
Code
$scope.getData = function(){
service.getLogData().success(function(data){
//process data
}).error(function(e){
//show error message
});
}
Les appels Ajax ne devrait pas être synchrone. En face, vous n'avez même pas besoin
Vous avez beaucoup de données retourné? L'appel ne devrait pas bloquer lors de l'appel ajax, mais j'imagine que ça pourrait bloquer si elle renvoie un grand nombre de données et les données de process" le code est peut-être lent.
Tout n'est pas cliquable. Je n'ai pas beaucoup de données, mais il faut du temps pour y arriver. Aussi, je suis en utilisant
async: true
option. Pouvez-vous expliquer plus en détail comment votre fenêtre de gel? Comme tout n'est pas cliquable, de ne pas répondre?Vous avez beaucoup de données retourné? L'appel ne devrait pas bloquer lors de l'appel ajax, mais j'imagine que ça pourrait bloquer si elle renvoie un grand nombre de données et les données de process" le code est peut-être lent.
Tout n'est pas cliquable. Je n'ai pas beaucoup de données, mais il faut du temps pour y arriver. Aussi, je suis en utilisant
ng-grid
à présent.OriginalL'auteur lostpacket | 2013-09-27
Vous devez vous connecter pour publier un commentaire.
Alors qu'il existe des argument sur les avantages et les inconvénients de votre approche, je pense que le problème est la réponse ici: Appel AJAX gèle navigateur pour un peu, alors qu'il reçoit la réponse et exécute succès
Pour tester si c'est en fait une partie du problème, le mannequin en place d'une réponse et de le servir de manière statique. J'utilise Fiddler ou WireShark pour obtenir la réponse avant de l'enregistrer dans un fichier, comme testService.json. XHR et tous ses dérivés comme le $HTTP $.ajax le voir comme un service de si les en-têtes peuvent être légèrement différentes.
OriginalL'auteur Nathaniel Johnson
Utiliser le succès de la promesse, et envelopper jusqu'à l'enregistrement de données dans un ensemble d'objets que vous pouvez attacher à un $scope.
Alors au lieu d'avoir à votre service un blocage de la méthode, il faut la maintenir à jour une liste de "LogEntries".
Puis dans votre contrôleur, d'injecter votre service et de référence de ce service journal des données du tableau de façon Angulaire de les regarder et de les modifier à l'afficher correctement
Ensuite dans le code HTML, il suffit de faire quelque chose de plus logEntries:
Attribuer $http promesse de vue n'est pas une bonne idée, voir ici github.com/angular/angular.js/issues/3196
mais il n'est pas de l'affectation de la promesse à la vue. Le retour de l'promesse est résolu dans le contrôleur et les données traitées. Il n'est pas affecté.
Les données n'est pas énorme. Seulement 30 lignes et 6 colonnes. J'ai pensé que ses le
ng-grid
mais dès qu'il a reçu des données, il analysés immédiatement.$scope.logEntries = mySvc.logEntries;
N'est-ce pas un appel. J'ai besoin d'obtenir journal basé sur différentes heures de début et fin.OriginalL'auteur Doug T.
utiliser ce code pour config
OriginalL'auteur Behnam Mohammadi
Tous sont montrés ci-angulaire de syntaxe ont été vieille/mal, donc mon intesion était de les mettre à jour. Le code ci-dessus est de faire async appel de service, toutefois, si des données est énorme, vous ne pouvez pas faire beaucoup à côté client seulement.
OriginalL'auteur Sanjeev Rao