Maison  >  Article  >  interface Web  >  L'ajax est-il synchrone ou asynchrone par défaut ?

L'ajax est-il synchrone ou asynchrone par défaut ?

青灯夜游
青灯夜游original
2022-01-17 16:14:485282parcourir

ajax utilise par défaut la soumission asynchrone ; AJAX est divisé en « faux » synchrone et « vrai » asynchrone en fonction de la valeur asynchrone, et par défaut la valeur asynchrone est vraie (soumission asynchrone). L’avantage est que cela peut améliorer l’expérience utilisateur grâce à une actualisation partielle, tout en économisant des ressources et en réduisant la pression sur la base de données.

L'ajax est-il synchrone ou asynchrone par défaut ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, JavaScript version 1.8.5, ordinateur Dell G3.

La méthode de soumission par défaut d'ajax est la soumission asynchrone. L'avantage est qu'elle peut améliorer l'expérience utilisateur grâce à une actualisation partielle, tout en économisant des ressources et en réduisant la pression sur la base de données.

AJAX est divisé en synchrone (async = false) et asynchrone (async = true) selon la valeur de async

$.ajax({ 
        type: "post", 
       url: "path", 
       cache:false, 
       async:false, 
        dataType: ($.browser.msie) ? "text" : "xml", 
         success: function(xmlobj){ 
                      function1(){};
        } 
});
 function2(){};

Par défaut, async est true (soumission asynchrone).

La façon de passer à la synchronisation est de changer la valeur par défaut de async en false, qui est généralement vraie ou non écrite. Si elle est modifiée en false, la fonction d'ajax sera perdue.

1. Qu'est-ce qu'une requête synchrone : (faux)

Une requête synchrone signifie qu'une fois la requête en cours émise, le navigateur ne peut rien faire. Il doit attendre que la requête soit terminée et que les données soient renvoyées avant la suivante. le code est exécuté, ce qui équivaut à Lorsque vous faites la queue, la personne devant vous a fini de s'occuper de ses affaires avant que la personne suivante puisse prendre le relais. C'est-à-dire que lorsque le code JS est chargé dans l'AJAX actuel, tout le code de la page cessera de se charger et la page sera dans un état d'animation suspendue. Une fois l'AJAX terminé, elle continuera à exécuter d'autres. codes et la page libérera l'état d'animation suspendu (c'est-à-dire lorsque ajax revient Après avoir reçu les données, la fonction suivante 2) est exécutée.

2. Qu'est-ce qu'une requête asynchrone : (vrai)

Une requête asynchrone signifie que le navigateur peut continuer à faire n'importe quoi pendant l'envoi de la requête. L'envoi de la requête par Ajax n'affectera pas le chargement de la page et le fonctionnement de l'utilisateur. , ce qui équivaut à Sur les deux lignes, chacune suit son propre chemin sans s'influencer mutuellement.

Généralement, la valeur par défaut est vraie, asynchrone. Les requêtes asynchrones n'affectent pas du tout l'expérience utilisateur. Quelle que soit la durée de la requête, l'utilisateur se concentre sur l'exploitation d'autres contenus de la page et n'a pas envie d'attendre.

Quelle est la différence entre synchrone et asynchrone :

Asynchrone : en mode asynchrone, après avoir utilisé AJAX pour envoyer la requête, il peut y avoir du code qui doit être exécuté. À l'heure actuelle, le serveur n'a peut-être pas répondu à notre demande pour diverses raisons, mais comme nous utilisons l'exécution asynchrone, le code restant dans toutes les fonctions contenant le code de requête AJAX continuera à s'exécuter. Si nous transmettons le résultat de la requête à une autre fonction JS pour traitement, ce sera comme si deux threads s'exécutaient en même temps.

Synchronisation : en mode synchrone, après avoir utilisé AJAX pour envoyer la requête, il reste encore du code qui doit être exécuté plus tard. Nous transmettons également la réponse du serveur à une autre fonction JS pour traitement, mais la situation d'exécution du code à ce moment-là. est : sur le serveur Lorsqu'il n'y a pas de réponse ou que la fonction JS qui gère le résultat de la réponse n'a pas été traitée et renvoyée, le code restant de la fonction contenant le code de la requête ne peut pas être exécuté. Tout comme un seul thread, il entre dans l'état de blocage après l'envoi de la requête, et le code restant ne continuera pas à s'exécuter jusqu'à ce qu'il touche l'état de blocage.

Regardez le code suivant :

var flag=true;
var index=0;
$.ajax({
  url: "",
  success: function(data){
    flag=false;
  } 
});
while(flag){
  index++;
}
alert(index);

Finalement, le programme est entré dans une boucle infinie

Regardez le code suivant :

var flag=true;
$.ajax({
  url: "",
  success: function(data){
    flag=false;
  } 
});
alert(flag);

Le résultat final est vrai

js est monothread, car l'exécution des requêtes ajax consommera un un certain temps, et même apparaître Il y a une panne de réseau et le résultat n'est pas renvoyé pendant longtemps ; à ce moment-là, s'il est exécuté de manière synchrone, vous devez attendre que ajax renvoie le résultat avant d'exécuter le code suivant. la requête ajax prend 1 minute, le programme devra attendre 1 minute. S'il est exécuté de manière asynchrone, en attendant le retour du serveur, le premier plan continuera à exécuter le script derrière le bloc ajax. Le succès ne sera pas exécuté tant que le serveur n'aura pas renvoyé des résultats normaux. À ce moment, deux threads seront exécutés, ajax Après. le bloc fait la requête, un fil de discussion et le script derrière le bloc ajax

var flag=true;
var index=0;
$.ajax({
  url: "",
  async:false,
  success: function(data){
    flag=false;
  } 
});
while(flag){
  index++;
}
alert(index);

Le résultat final est 0

[Recommandation de tutoriel associée : Tutoriel vidéo AJAX]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn