Maison interface Web js tutoriel Quelles sont les différences entre l'utilisation de readyState et de status en Ajax ?

Quelles sont les différences entre l'utilisation de readyState et de status en Ajax ?

Apr 02, 2018 am 10:06 AM
ajax

Cette fois, je vais vous expliquer quelles sont les différences entre l'utilisation de readyState et de status en Ajax, et quelles sont les précautions lors de l'utilisation de readyState et de status en Ajax. Voici des cas pratiques, jetons un coup d'oeil.

Dans les articles précédents, j'ai analysé l'asynchrone et la synchronicité ajax de jquery, ainsi que certaines gestions d'exceptions. J'ai l'impression que l'état prêt et le statut d'ajax n'ont pas été expliqués clairement. Aujourd'hui, parlons du statut ajax.

Le code source de la fonction jquery ajax ressemble à ceci :

var getXmlHttpRequest = function () {
  if (window.XMLHttpRequest) {
    //主流浏览器提供了XMLHttpRequest对象
    return new XMLHttpRequest();
  }
  else if (window.ActiveXObject) {
    //低版本的IE浏览器没有提供XMLHttpRequest对象
    //所以必须使用IE浏览器的特定实现ActiveXObject
    return new ActiveXObject("Microsoft.XMLHTTP");
  }
};
var xhr = getXmlHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    //获取成功后执行操作
    //数据在xhr.responseText
  }
};
xhr.open("TYPE", "URL", true);
xhr.send("");
Copier après la connexion

Qu'est-ce que readyState

readyState est l'objet XMLHttpRequest Attribut utilisé pour identifier l'état de l'objet XMLHttpRequest actuel.

readyState a un total de 5 valeurs d'état, allant de 0 à 4. Chaque valeur représente une signification différente, comme indiqué dans le tableau suivant :

0 État non initialisé : à ce moment, il a été créé Un objet XMLHttpRequest

1 Statut Prêt à envoyer : A ce moment, la méthode open de l'objet XMLHttpRequest a été appelée, et l'objet XMLHttpRequest est prêt à envoyer une requête au serveur

2 Statut déjà envoyé : À ce moment, une demande a été envoyée au serveur via la méthode d'envoi, mais aucune réponse n'a été reçue

3 Statut de réception : À ce moment, les informations d'en-tête de réponse HTTP a été reçu, mais la partie du corps du message n'est pas encore entièrement reçue

4 Statut de réponse terminée : À ce stade, la réception de la réponse HTTP est terminée

Quoi is status

Status est un attribut de l'objet XMLHttpRequest, indiquant le code d'état HTTP de la réponse.

Sous le protocole HTTP1.1, les codes d'état HTTP peuvent être divisés en 5 catégories, comme indiqué dans le tableau suivant :

1XX Le serveur a reçu la demande et doit poursuivre le traitement. Par exemple, le code d'état 101 signifie que le serveur informera le client d'utiliser une version supérieure du protocole HTTP.

2XX La demande a abouti. Par exemple, un code d'état 200 indique que l'en-tête de réponse ou le corps de données attendu par la requête sera renvoyé avec cette réponse.

Redirection 3XX. Par exemple, le code d'état 302 indique une redirection temporaire. La requête contiendra une nouvelle adresse URL et le client effectuera une requête GET pour la nouvelle adresse.

Erreur client 4XX. Par exemple, le code d'état 404 indique que la ressource demandée par le client n'existe pas.

Erreur du serveur 5XX. Par exemple, un code d'état 500 indique que le serveur a rencontré une situation inattendue qui l'a empêché de terminer la réponse. De manière générale, ce problème se produit lorsqu'une erreur se produit dans le code du programme.

Poser une question

Pourquoi l'implémentation de la fonction onreadystatechange doit-elle déterminer readyState et status en même temps ?

Nous savons que readyState === 4 a déjà indiqué que la réponse à la demande a réussi, pourquoi y a-t-il un statut ultérieur ? En gardant ces questions à l’esprit, commençons par faire quelques expériences.

Utilisez uniquement readyState pour juger

 Le code d'implémentation côté javascript est le suivant :

var getXmlHttpRequest = function () {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  }
  else if (window.ActiveXObject) {
    return new ActiveXObject("Microsoft.XMLHTTP");
  }
};
var xhr = getXmlHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4) {
    alert(xhr.responseText);
  }
};
xhr.open("GET", "/data.aspx", true);
xhr.send("");
Copier après la connexion

Nous lançons une exception sur le serveur côté :

public partial class data : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    throw new Exception("Error");
  }
}
Copier après la connexion

Exécutez le code javascript et la fenêtre d'invite apparaît comme suit :

La réponse du service a un erreur, mais les informations sont toujours renvoyées. Ce n'est pas le résultat souhaité. Ouvrez la surveillance Fiddler, vous pouvez voir que data.aspx renvoie une réponse 500, mais comme il utilise uniquement readystate pour porter des jugements, il ne se soucie pas de savoir si le résultat renvoyé est 500 ou 200. Tant que la réponse est renvoyée avec succès, le prochain le code javascript sera exécuté. Le résultat sera diverses erreurs imprévisibles. Donc, utiliser simplement readyState pour juger ne fonctionnera pas.

En y réfléchissant sous un autre angle, si le code d'état renvoie 200, cela signifie que la réponse est réussie. Alors, ne pouvons-nous pas utiliser readyState et utiliser status uniquement pour porter des jugements ? Bon, avec des questions en tête, poursuivons l’expérience.

Utiliser uniquement le statut pour déterminer

Le code côté JavaScript est implémenté comme suit :

var getXmlHttpRequest = function () {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  }
  else if (window.ActiveXObject) {
    return new ActiveXObject("Microsoft.XMLHTTP");
  }
};
var xhr = getXmlHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.status === 200) {
    alert("readyState=" + xhr.readyState + xhr.responseText);
  }
};
xhr.open("GET", "/data.aspx", true);
xhr.send("");
Copier après la connexion

事实上,结果却不像预期那样。响应码确实是返回了200,但是总共弹出了3次窗口!第一次是“readyState=2”的窗口,第二次是“readyState=3Test”的窗口,第三次是“readyState=4Test”的窗口。由此,可见onreadystatechange函数的执行不是只在readyState变为4的时候触发的,而是readyState的每次变化都会触发,所以就出现了前面说的那种情况。可见,单独使用status判断也是行不通的。

进一步思考

  由上面的试验,我们可以知道判断的时候readyState和status缺一不可。那么readyState和status的先后判断顺序会不会有影响呢?我们可以将status调到前面先判断,代码如 xhr.status === 200 && xhr.readyState === 4。

  事实上,这对于最终的结果是没有影响的,但是中间的性能就不同了。由上一个试验我们知道,readyState的每次变化都会触发onreadystatechange函数,假如先判断status,那么每次都会多判断一次status的状态。虽然性能上影响甚微,不过我们还是应该抱着追求极致代码的想法,把readyState的判断放在前面。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

jQuery+Ajax判断输入的验证码是否通过

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment résoudre l'erreur 403 rencontrée par la requête jQuery AJAX Comment résoudre l'erreur 403 rencontrée par la requête jQuery AJAX Feb 20, 2024 am 10:07 AM

Titre : Méthodes et exemples de code pour résoudre les erreurs 403 dans les requêtes jQuery AJAX L'erreur 403 fait référence à une demande selon laquelle le serveur interdit l'accès à une ressource. Cette erreur se produit généralement parce que la demande manque d'autorisations ou est rejetée par le serveur. Lorsque vous effectuez des requêtes jQueryAJAX, vous rencontrez parfois cette situation. Cet article explique comment résoudre ce problème et fournit des exemples de code. Solution : Vérifiez les autorisations : assurez-vous d'abord que l'adresse URL demandée est correcte et vérifiez que vous disposez des autorisations suffisantes pour accéder à la ressource.

Comment résoudre l'erreur 403 de la requête jQuery AJAX Comment résoudre l'erreur 403 de la requête jQuery AJAX Feb 19, 2024 pm 05:55 PM

jQuery est une bibliothèque JavaScript populaire utilisée pour simplifier le développement côté client. AJAX est une technologie qui envoie des requêtes asynchrones et interagit avec le serveur sans recharger la page Web entière. Cependant, lorsque vous utilisez jQuery pour effectuer des requêtes AJAX, vous rencontrez parfois des erreurs 403. Les erreurs 403 sont généralement des erreurs d'accès refusé par le serveur, probablement en raison de problèmes de politique de sécurité ou d'autorisation. Dans cet article, nous verrons comment résoudre la requête jQueryAJAX rencontrant une erreur 403.

PHP et Ajax : créer un moteur de suggestions de saisie semi-automatique PHP et Ajax : créer un moteur de suggestions de saisie semi-automatique Jun 02, 2024 pm 08:39 PM

Créez un moteur de suggestions de saisie semi-automatique en utilisant PHP et Ajax : Script côté serveur : gère les requêtes Ajax et renvoie des suggestions (autocomplete.php). Script client : envoyer une requête Ajax et afficher des suggestions (autocomplete.js). Cas pratique : Incluez le script dans la page HTML et spécifiez l'identifiant de l'élément d'entrée de recherche.

Comment résoudre le problème de l'erreur 403 jQuery AJAX ? Comment résoudre le problème de l'erreur 403 jQuery AJAX ? Feb 23, 2024 pm 04:27 PM

Comment résoudre le problème de l’erreur 403 jQueryAJAX ? Lors du développement d'applications Web, jQuery est souvent utilisé pour envoyer des requêtes asynchrones. Cependant, vous pouvez parfois rencontrer le code d'erreur 403 lors de l'utilisation de jQueryAJAX, indiquant que l'accès est interdit par le serveur. Cela est généralement dû aux paramètres de sécurité côté serveur, mais il existe des moyens de résoudre le problème. Cet article explique comment résoudre le problème de l'erreur 403 jQueryAJAX et fournit des exemples de code spécifiques. 1. faire

Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Mar 09, 2024 pm 05:36 PM

L'utilisation d'Ajax pour obtenir des variables à partir de méthodes PHP est un scénario courant dans le développement Web. Grâce à Ajax, la page peut être obtenue dynamiquement sans actualiser les données. Dans cet article, nous présenterons comment utiliser Ajax pour obtenir des variables à partir de méthodes PHP et fournirons des exemples de code spécifiques. Tout d’abord, nous devons écrire un fichier PHP pour gérer la requête Ajax et renvoyer les variables requises. Voici un exemple de code pour un simple fichier PHP getData.php :

PHP vs Ajax : solutions pour créer du contenu chargé dynamiquement PHP vs Ajax : solutions pour créer du contenu chargé dynamiquement Jun 06, 2024 pm 01:12 PM

Ajax (Asynchronous JavaScript et XML) permet d'ajouter du contenu dynamique sans recharger la page. En utilisant PHP et Ajax, vous pouvez charger dynamiquement une liste de produits : HTML crée une page avec un élément conteneur et la requête Ajax ajoute les données à l'élément après l'avoir chargé. JavaScript utilise Ajax pour envoyer une requête au serveur via XMLHttpRequest afin d'obtenir des données produit au format JSON à partir du serveur. PHP utilise MySQL pour interroger les données produit de la base de données et les encoder au format JSON. JavaScript analyse les données JSON et les affiche dans le conteneur de pages. Cliquer sur le bouton déclenche une requête Ajax pour charger la liste de produits.

PHP et Ajax : moyens d'améliorer la sécurité d'Ajax PHP et Ajax : moyens d'améliorer la sécurité d'Ajax Jun 01, 2024 am 09:34 AM

Afin d'améliorer la sécurité Ajax, il existe plusieurs méthodes : Protection CSRF : générer un token et l'envoyer au client, l'ajouter côté serveur dans la demande de vérification. Protection XSS : utilisez htmlspecialchars() pour filtrer les entrées afin d'empêcher l'injection de scripts malveillants. En-tête Content-Security-Policy : limite le chargement de ressources malveillantes et spécifie les sources à partir desquelles les scripts et les feuilles de style peuvent être chargés. Valider les entrées côté serveur : validez les entrées reçues des requêtes Ajax pour empêcher les attaquants d'exploiter les vulnérabilités d'entrée. Utilisez des bibliothèques Ajax sécurisées : profitez des modules de protection CSRF automatiques fournis par des bibliothèques telles que jQuery.

Quelles sont les versions ajax ? Quelles sont les versions ajax ? Nov 22, 2023 pm 02:00 PM

Ajax n'est pas une version spécifique, mais une technologie qui utilise un ensemble de technologies pour charger et mettre à jour de manière asynchrone le contenu d'une page Web. Ajax n'a pas de numéro de version spécifique, mais il existe quelques variantes ou extensions d'ajax : 1. jQuery AJAX ; 2. Axios ; 3. Fetch API 5. XMLHttpRequest Niveau 2 ; -Événements envoyés ; 8, GraphQL, etc.

See all articles