Comment annuler un $requête http dans AngularJS?
Donné une requête Ajax dans AngularJS
$http.get("/backend/").success(callback);
quel est le moyen le plus efficace pour annuler cette demande si une autre demande est lancé (même en arrière-plan, les différents paramètres, par exemple).
- Aucune des réponses ci-dessous fait annuler la demande elle-même. Il n'y a aucun moyen d'annuler une requête HTTP, une fois qu'il quitte le navigateur. Tous les ci-dessous les réponses simplement abondon de l'auditeur, d'une certaine façon. La requête HTTP continue de frapper le serveur, est toujours traités et le serveur envoie toujours une réponse, c'est juste une affaire de déterminer si le client est toujours lisening pour que la réponse ou pas.
- $requête http annuler sur la route à modifier freakyjolly.com/how-to-cancel-http-requests-in-angularjs-app
- code pour
promise.abort()
stackoverflow.com/a/50415480/984780
Vous devez vous connecter pour publier un commentaire.
Cette fonctionnalité a été ajouté à la version 1.1.5 via un paramètre de délai d'expiration:
setTimeout
fonction ou Angulaire du$timeout
service.canceller.reject()
au lieu @JitendraKhatri?promise.abort()
checkout stackoverflow.com/a/50415480/984780Annulation Angulaire $http Ajax avec le délai de propriété ne fonctionne pas dans Angulaire 1.3.15.
Pour ceux qui ne peuvent pas attendre pour être fixé, je suis le partage de jQuery Ajax solution enveloppé dans Angulaire.
La solution comprend deux services:
Va ici le PendingRequestsService service:
La HttpService service:
Plus tard dans votre service lorsque vous chargez des données, vous utilisez le HttpService au lieu de $http:
Plus loin dans votre code que vous souhaitez charger les données:
Annulation de demandes émises avec
$http
n'est pas pris en charge avec la version actuelle d'AngularJS. Il y a un pull request ouvert pour ajouter cette fonctionnalité, mais ce RP n'était pas encore vérifiées, donc il n'est pas clair si sa va le faire dans AngularJS de base.Si vous souhaitez annuler les demandes en attente sur stateChangeStart avec ui-routeur, vous pouvez utiliser quelque chose comme ceci:
//en service
//en UIrouter config
request.timeout
est présent?Pour quelque raison config.délai d'attente ne fonctionne pas pour moi. J'ai utilisé cette approche:
JS:
Et cancelRequest.résoudre() pour annuler. En fait, il n'a pas d'annuler une demande, mais vous n'obtenez pas inutile de réponse au moins.
Espère que cette aide.
{ cancelPromise, httpPromise }
?Ce qui renforce la accepté de répondre par la décoration de la $service http, avec un abandon de la méthode comme suit ...
QU'EST-CE QUE CE CODE FAIT?
Pour annuler une demande, une "promesse" délai d'attente doit être définie.
Si aucun délai d'attente est défini dans la requête HTTP, puis le code ajoute une "promesse" délai d'attente.
(Si le délai d'attente est déjà alors rien n'est changé).
Toutefois, pour résoudre la promesse que nous avons besoin d'une poignée sur le "différé".
Nous avons donc l'utilisation d'une carte afin que nous puissions récupérer le "différé" plus tard.
Lorsque nous appelons la méthode abort, le "différé", est extrait de la carte, puis nous appelons la méthode resolve pour annuler la requête http.
Espère que cela aide quelqu'un.
LIMITATIONS
Actuellement, cela ne fonctionne que pour $http.obtenir, mais vous pouvez ajouter du code pour $http.poste et ainsi de suite
COMMENT UTILISER ...
Vous pouvez ensuite utiliser pour, par exemple, sur changement d'état, comme suit ...
ici est une version qui gère plusieurs demandes, vérifie également pour l'annulation du statut dans la fonction de rappel pour supprimer les erreurs dans l'erreur de bloc. (en caractères d'imprimerie)
contrôleur de niveau:
dans mon http get:
méthodes d'aide
maintenant en regardant l'onglet réseau, je vois que ça fonctionne beatuifully. j'ai appelé la méthode 4 fois et seul le dernier est allé de travers.
Vous pouvez ajouter une fonction personnalisée pour la
$http
service à l'aide d'un "décorateur" qui permettrait d'ajouter à laabort()
fonction de vos promesses.Voici une partie du code qui fonctionne:
Ce code utilise angularjs du décorateur fonctionnalités à ajouter un
with_abort()
fonction de la$http
service.with_abort()
utilise$http
délai d'expiration de l'option qui vous permet d'interrompre une requête http.Le retour de la promesse est modifié pour inclure une
abort()
fonction. Il dispose également d'un code de s'assurer que leabort()
fonctionne même si vous avez de la chaîne de promesses.Voici un exemple de la façon dont vous l'utiliser:
Par défaut lorsque vous appelez
abort()
la demande sera annulée et aucun de la promesse des gestionnaires d'exécuter.Si vous voulez que votre erreur maîtres de passe fidèle à
abort(true)
.Dans votre gestionnaire d'erreur, vous pouvez vérifier si l'erreur était due à un "abandon" en cochant la
xhrStatus
de la propriété. Voici un exemple: