Maison développement back-end Tutoriel XML/RSS XML Http Demander la dernière technologie alternative - Récupérer

XML Http Demander la dernière technologie alternative - Récupérer

Feb 25, 2017 pm 01:58 PM
request xml

Dans les applications Web, JavaScript utilise XMLHttpRequest (XHR) pour effectuer des requêtes asynchrones, qui est une technologie qui améliore efficacement la communication des pages. Lorsque nous parlons de technologie Ajax, nous entendons généralement Ajax basé sur XMLHttpRequest. Bien que Ajax est utile, mais ce n'est pas la meilleure API. Elle n'est pas conçue pour adhérer au principe de séparation des tâches, mélangeant les entrées, les sorties et l'état suivi avec les événements dans un seul objet. De plus, les modèles basés sur les événements sont désormais JavaScript est en contradiction avec ses modèles de programmation asynchrone populaires basés sur Promise et générateur. Cet article présentera la dernière technologie alternative à XMLHttpRequest—— Fetch API, qui est une norme officielle du W3C.

Compatibilité

Avant de présenter, jetons un coup d'œil à la prise en charge actuelle des navigateurs grand public pour l'API Fetch :

XML Http Demander la dernière technologie alternative - Récupérer

Support de récupération Il est toujours présent les premiers stades, dans Firefox 39 et supérieur, et Chrome 42 Tous les éléments ci-dessus sont pris en charge.


Si vous souhaitez l'utiliser maintenant, vous pouvez également utiliser Fetch Polyfil pour soutenir ceux qui ne prennent pas encore en charge Fetch navigateur.


Avant d'utiliser Fetch, vous pouvez également effectuer des tests fonctionnels dessus :

if(self.fetch) {
    // run my fetch request here
} else {
    // do something with 
XMLHttpRequest?
}
Copier après la connexion

Exemple de récupération simple


Dans l'API Fetch, la fonction la plus couramment utilisée est la fonction fetch(). Il reçoit un paramètre URL et renvoie un promettez de gérer la réponse. réponse est un objet Response :

fetch("/data.json").then(function(res) 
{
  // res instanceof Response == 
true.
  if (res.ok) {
    res.json().then(function(data) {
      console.log(data.entries);
    });
  } else {
    console.log("Looks like the response wasn't 
perfect, got status", res.status);
  }
}, function(e) {
  console.log("Fetch failed!", e);
});
Copier après la connexion


fetch() accepte un deuxième paramètre facultatif, un objet init qui peut contrôler différentes configurations. Si vous soumettez un Requête POST, le code est le suivant :

fetch("http://www.example.org/submit.php", 
{
  method: "POST",
  headers: {
    "Content-Type": 
"application/x-www-form-urlencoded"
  },
  body: 
"firstName=Nikhil&favColor=blue&password=easytoguess"
}).then(function(res) {
  if (res.ok) {
    //res.ok用于检测请求是否成功
    console.log("Perfect! Your settings are 
saved.");
  } else if (res.status == 401) {
    console.log("Oops! You are not 
authorized.");
  }
}, function(e) {
  console.log("Error submitting 
form!");
});
Copier après la connexion

S'il y a une panne de réseau, la promesse fetch() sera rejetée, avec un Objet TypeError. Pour déterminer avec précision si fetch() réussit, vous devez inclure la situation résolue par la promesse, puis déterminer Response.ok à ce moment-là est vrai.


Fetch implémente quatre interfaces : GlobalFetch, Headers, Request et Réponse. GloabaFetch ne contient qu'une seule méthode de récupération pour obtenir des ressources réseau, et les trois autres correspondent directement aux concepts HTTP correspondants. De plus, dans En requête/réponse, Body est également confus.

En-têtes

L'interface des en-têtes permet de définir HTTP En-têtes de requête (Request.headers) et en-têtes de réponse (Response.headers). Un objet Headers est une simple paire de valeurs multi-noms :

var content = "Hello World";
var myHeaders = new Headers();
myHeaders.append("Content-Type", 
"text/plain");
myHeaders.append("Content-Length", 
content.length.toString());
myHeaders.append("X-Custom-Header", 
"ProcessThisImmediately");
Copier après la connexion


Vous pouvez également transmettre un tableau multidimensionnel ou un littéral d'objet :

myHeaders = new Headers({
  "Content-Type": "text/plain",
  "Content-Length": 
content.length.toString(),
  "X-Custom-Header": 
"ProcessThisImmediately",
});
Copier après la connexion

De plus, l'interface Headers fournit des API de définition, de suppression et autres. Utilisé pour récupérer son contenu :

console.log(reqHeaders.has("Content-Type")); // 
true
console.log(reqHeaders.has("Set-Cookie")); // 
false
reqHeaders.set("Content-Type", 
"text/html");
reqHeaders.append("X-Custom-Header", 
"AnotherValue");
console.log(reqHeaders.get("Content-Length")); 
// 11
console.log(reqHeaders.getAll("X-Custom-Header")); // 
["ProcessThisImmediately", "AnotherValue"]
reqHeaders.delete("X-Custom-Header");
console.log(reqHeaders.getAll("X-Custom-Header")); // 
[]
Copier après la connexion


Bien que certaines opérations ne soient utilisées qu'au sein des ServiceWorkers, elles sont relativement XHR lui-même fournit une API très pratique pour exploiter les en-têtes.


Pour des raisons de sécurité, certains champs d'en-tête ne peuvent être définis que via l'agent utilisateur Implémentation, ne peut pas être définie par programme : champ interdit d'en-tête de demande et champ interdit d'en-tête de réponse.


Si un nom d'attribut d'en-tête HTTP illégal est utilisé ou si un attribut non inscriptible est écrit, les en-têtes Les méthodes génèrent généralement des exceptions TypeError :

var myResponse = Response.error();
try {
  myResponse.headers.set("Origin", 
"http://mybank.com");
} catch(e) {
  console.log("Cannot pretend to be a 
bank!");
}
Copier après la connexion

La meilleure pratique consiste à vérifier si le type de contenu est correct avant de l'utiliser, par exemple :

fetch(myRequest).then(function(response) 
{
  if(response.headers.get("content-type") === 
"application/json") {
    return response.json().then(function(json) 
{
      // process your JSON further
    });
  } else {
    console.log("Oops, we haven't got 
JSON!");
  }
});
Copier après la connexion

Puisque les en-têtes peuvent être utilisés dans le demande demande Envoyer ou en réponse Reçu dans la requête et précisant quels paramètres sont accessibles en écriture, l'objet Headers possède un attribut de garde spécial. Cette propriété n'est pas exposée au Web, mais elle affecte le contenu qui peut être L'objet en-têtes est modifié.


Les valeurs possibles sont les suivantes :


aucun : Par défaut

r

equest:从 request 中获得的 
headers(Request.headers)只读
request-no-cors:从不同域(Request.mode no-cors)的 
request 中获得的 headers 只读
response:从 response 中获得的 
headers(Response.headers)只读
immutable:在 ServiceWorkers 中最常用的,所有的 headers 
都只读
Copier après la connexion


Demande


Demande L'interface définit le format de requête pour demander des ressources via HTTP. Une requête simple est construite comme suit :

var req = new 
Request("/index.html");
console.log(req.method); // "GET"
console.log(req.url); // 
"http://example.com/index.html"
console.log(req.headers); 
//请求头
Copier après la connexion

Identique à fetch(), Request accepte un deuxième paramètre facultatif, un init qui peut contrôler différentes configurations. Objet :

var myHeaders = new Headers();
var myInit = { method: 'GET',
               headers: myHeaders,
               mode: 'cors',
               cache: 'default' ,
               credentials: true,
               body: "image data"};
var myRequest = new 
Request('flowers.jpg',myInit);
fetch(myRequest,myInit)
.then(function(response) {
  return response.blob();
})
.then(function(myBlob) {
  var objectURL = 
URL.createObjectURL(myBlob);
  myImage.src = objectURL;
});
Copier après la connexion


L'attribut mode est utilisé pour déterminer si les requêtes inter-domaines sont autorisées et quels attributs de réponse sont lisibles. mode Valeurs d'attribut facultatives :

same-origin : la requête suit la politique de même origine

no-cors : valeur par défaut, autorisant les scripts du CDN, les images d'autres domaines et d'autres ressources inter-domaines (La condition préalable est la méthode ne peut être que HEAD, GET ou POST)

cors : le cross-domain est autorisé, la requête suit le protocole CROS

l'attribut d'énumération des informations d'identification détermine si les cookies peuvent être obtenus à travers les domaines, ce qui est conforme à XHR L'indicateur withCredentials est le même, mais n'a que trois valeurs, à savoir omettre (par défaut), même origine et inclure.

Réponse

L'instance de réponse est après que fentch() gère les promesses Les instances renvoyées ultérieurement peuvent également être créées via JavaScript, mais ne sont vraiment utiles qu'au sein de ServiceWorkers. Lors de l'utilisation deresponsWith() et fournit une réponse personnalisée pour accepter la requête :

 var myBody = new Blob();
addEventListener('fetch', function(event) 
{
  event.respondWith(new Response(myBody, 
{
    headers: { "Content-Type" : "text/plain" 
}
  });
});
Copier après la connexion


Le constructeur Response() accepte deux paramètres facultatifs : le corps des données de réponse et un objet Initialize (avec Les paramètres d'initialisation acceptés par Request() sont similaires.)

Les attributs de réponse les plus courants sont :

Response.status — 整数(默认值为200) 
为response的状态码.
Response.statusText — 
字符串(默认值为OK),该值与HTTP状态码消息对应.
Response.ok — 如上所示, 
该属性是来检查response的状态是否在200-299(包括200,299)这个范围内.该属性返回一个Boolean值.
Response.headers — 响应头
Response.type — 响应类型,如:basic/ cors 
/error
Copier après la connexion

Body

Request et Response implémentent l'interface Body. Pendant le processus de demande, les deux porteront Corps, qui peut être une instance de l'un des types suivants :

ArrayBuffer
ArrayBufferView
Blob/file
URLSearchParams
FormData
Copier après la connexion

此外,Request 和 Response 都为他们的body提供了以下方法,这些方法都返回一个Promise对象:

arrayBuffer()
blob()
json()
text()
formData()
Copier après la connexion


 以上就是XML Http Request最新替代技术—— Fetch 的内容,更多相关内容请关注PHP中文网(www.php.cn)!


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)

Puis-je ouvrir un fichier XML à l'aide de PowerPoint ? Puis-je ouvrir un fichier XML à l'aide de PowerPoint ? Feb 19, 2024 pm 09:06 PM

Les fichiers XML peuvent-ils être ouverts avec PPT ? XML, Extensible Markup Language (Extensible Markup Language), est un langage de balisage universel largement utilisé dans l'échange et le stockage de données. Comparé au HTML, XML est plus flexible et peut définir ses propres balises et structures de données, rendant le stockage et l'échange de données plus pratiques et unifiés. PPT, ou PowerPoint, est un logiciel développé par Microsoft pour créer des présentations. Il fournit un moyen complet de

Utiliser Python pour fusionner et dédupliquer des données XML Utiliser Python pour fusionner et dédupliquer des données XML Aug 07, 2023 am 11:33 AM

Utilisation de Python pour fusionner et dédupliquer des données XML XML (eXtensibleMarkupLanguage) est un langage de balisage utilisé pour stocker et transmettre des données. Lors du traitement de données XML, nous devons parfois fusionner plusieurs fichiers XML en un seul ou supprimer les données en double. Cet article explique comment utiliser Python pour implémenter la fusion et la déduplication de données XML, et donne des exemples de code correspondants. 1. Fusion de données XML Lorsque nous avons plusieurs fichiers XML, nous devons les fusionner

Convertir des données XML au format CSV en Python Convertir des données XML au format CSV en Python Aug 11, 2023 pm 07:41 PM

Convertir des données XML en Python au format CSV XML (ExtensibleMarkupLanguage) est un langage de balisage extensible couramment utilisé pour le stockage et la transmission de données. CSV (CommaSeparatedValues) est un format de fichier texte délimité par des virgules couramment utilisé pour l'importation et l'exportation de données. Lors du traitement des données, il est parfois nécessaire de convertir les données XML au format CSV pour faciliter l'analyse et le traitement. Python est un puissant

Filtrage et tri des données XML à l'aide de Python Filtrage et tri des données XML à l'aide de Python Aug 07, 2023 pm 04:17 PM

Implémentation du filtrage et du tri des données XML à l'aide de Python Introduction : XML est un format d'échange de données couramment utilisé qui stocke les données sous forme de balises et d'attributs. Lors du traitement de données XML, nous devons souvent filtrer et trier les données. Python fournit de nombreux outils et bibliothèques utiles pour traiter les données XML. Cet article explique comment utiliser Python pour filtrer et trier les données XML. Lecture du fichier XML Avant de commencer, nous devons lire le fichier XML. Python possède de nombreuses bibliothèques de traitement XML,

Python implémente la conversion entre XML et JSON Python implémente la conversion entre XML et JSON Aug 07, 2023 pm 07:10 PM

Python implémente la conversion entre XML et JSON Introduction : Dans le processus de développement quotidien, nous devons souvent convertir des données entre différents formats. XML et JSON sont des formats d'échange de données courants. En Python, nous pouvons utiliser diverses bibliothèques pour réaliser une conversion mutuelle entre XML et JSON. Cet article présentera plusieurs méthodes couramment utilisées, avec des exemples de code. 1. Pour convertir XML en JSON en Python, nous pouvons utiliser le module xml.etree.ElementTree

Gestion des erreurs et des exceptions en XML à l'aide de Python Gestion des erreurs et des exceptions en XML à l'aide de Python Aug 08, 2023 pm 12:25 PM

Gestion des erreurs et des exceptions dans XML à l'aide de Python XML est un format de données couramment utilisé pour stocker et représenter des données structurées. Lorsque nous utilisons Python pour traiter XML, nous pouvons parfois rencontrer des erreurs et des exceptions. Dans cet article, je vais vous présenter comment utiliser Python pour gérer les erreurs et les exceptions dans XML, et fournir un exemple de code pour référence. Utilisez l'instruction try-sauf pour détecter les erreurs d'analyse XML Lorsque nous utilisons Python pour analyser XML, nous pouvons parfois rencontrer des

Python analyse les caractères spéciaux et les séquences d'échappement en XML Python analyse les caractères spéciaux et les séquences d'échappement en XML Aug 08, 2023 pm 12:46 PM

Python analyse les caractères spéciaux et les séquences d'échappement en XML XML (eXtensibleMarkupLanguage) est un format d'échange de données couramment utilisé pour transférer et stocker des données entre différents systèmes. Lors du traitement de fichiers XML, vous rencontrez souvent des situations contenant des caractères spéciaux et des séquences d'échappement, qui peuvent provoquer des erreurs d'analyse ou une mauvaise interprétation des données. Par conséquent, lors de l’analyse de fichiers XML à l’aide de Python, nous devons comprendre comment gérer ces caractères spéciaux et ces séquences d’échappement. 1. Caractères spéciaux et

Comment gérer les formats de données XML et JSON dans le développement C# Comment gérer les formats de données XML et JSON dans le développement C# Oct 09, 2023 pm 06:15 PM

La gestion des formats de données XML et JSON dans le développement C# nécessite des exemples de code spécifiques. Dans le développement de logiciels modernes, XML et JSON sont deux formats de données largement utilisés. XML (Extensible Markup Language) est un langage de balisage permettant de stocker et de transmettre des données, tandis que JSON (JavaScript Object Notation) est un format d'échange de données léger. Dans le développement C#, nous devons souvent traiter et exploiter des données XML et JSON. Cet article se concentrera sur la façon d'utiliser C# pour traiter ces deux formats de données et les attacher.

See all articles