52 votes

Que se passe-t-il si une fenêtre d'alerte apparaît pendant un appel ajax?

Je me demandais juste ce qui pourrait arriver si, pendant un appel ajax est en cours d'exécution, une alerte est demandé à l'utilisateur, dans la fenêtre du navigateur.

Disons, par exemple, que j'ai un appel ajax

$.ajax({
    url: ...,
    type: GET/POST,
    ...
    success: function(data){
        console.log(data);
    },
    error: ...
});

qui prend du temps (10 secondes). Alors que l'appel est exécuté, un simple javascript alerte est levée

alert("hello!");

Ce qui se passe par exemple si:

  1. appel ajax commence
  2. appel ajax, extraction de données
  3. alerte
  4. appel ajax retourne des données (fenêtre d'alerte est toujours ouverte!)

Sachant que le JS est mono-thread, je sais que l'exécution du script s'arrête, je me demandais juste ce qui se passe à l'appel ajax/réponse, si la fenêtre d'alerte n'est pas fermée "dans le temps".

J'espère avoir été assez clair et que ce n'est pas un "dummy" de la question. Merci

60voto

musefan Points 23208

Ce n'est pas exactement difficile d'essayer et de voir... mais la réponse est que l'alerte aura la priorité, et le flux d'exécution.

Lors de la fermeture de l'alerte, et en supposant que la requête AJAX a terminé alors que l'alerte a été ouvert, puis l' success fonction sera traitée (ou error de la fonction).

Notez que la requête AJAX de continuer à fonctionner alors que l'alerte est affiché (et donc une longue course AJAX processus, alors que l'alerte est ouvert), mais c'est juste que votre script ne peut pas continuer le traitement de la demande jusqu'à ce que l'alerte est fermé.

Voici un exemple de travail, notez que les données n'est pas écrit dans la console jusqu'à ce que l'alerte est fermé.

Un autre point à prendre en compte est que, après l'alerte se ferme, le script va continuer avec le reste de la fonction (le code immédiatement après l' alert) avant de l'AJAX réponse est traitée. Cela permet de démontrer ce que je veux dire

11voto

Quentin Points 325526

La demande HTTP continuera à s'exécuter et sera traitée en arrière-plan.

Lorsque la boucle d'événements JS devient libre, le gestionnaire readystatechange se déclenche.

Certains états intermédiaires prêts peuvent être ignorés car la boucle d'événement était occupée alors que cet état était à true.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X