À l'origine, Microsoft a conçu XMLHttpRequest pour permettre à l'Internet Explorer (IE) de charger des documents de XML du Javascript. Quoiqu'il ait XML dans son nom, XMLHttpRequest est vraiment un client générique de HTTP pour le Javascript. Avec lui, le Javascript peut faire POUR OBTENIR et SIGNALER des demandes de HTTP. (pour des demandes de POTEAU, des données peuvent être envoyées au serveur dans un format de votre choix.) Les limitations principales à XMLHttpRequest sont dues au sandbox de sécurité de navigateur. Il peut faire seulement des demandes de HTTP(S) (le dossier URLs, par exemple, pas travail), et il peut faire des demandes seulement au même domaine que la page actuellement chargée.
|
|
Les limitations de sécurité de XMLHttpRequest limitent les manières dans lesquelles vous pouvez l'employer, mais la différence dans la sécurité supplémentaire est bonne en valeur elle. La plupart des attaques contre des applications de Javascript se concentrent sur le code malveillant d'injection dans la Page Web. Si XMLHttpRequest permettait des demandes à n'importe quel emplacement de Web, c'irait bien à un joueur important dans ces attaques. Le sandbox de sécurité réduit ces problèmes potentiels. En outre, il simplifie le modèle de programmation parce que le code de Javascript peut implicitement faire confiance à n'importe quelles données qu'il charge de XMLHttpRequest. Il peut faire confiance aux données parce que les nouvelles données sont comme bloquées juste que la page qui a chargé la page initiale.
Malgré le fait que XMLHttpRequest fournit seulement un petit api et juste une poignée de méthodes et de propriétés, il a ses différences entre les navigateurs. Ces différences sont principalement dans l'événement manipulant et objectent l'instantiation (dans l'IE, XMLHttpRequest est réellement un objet d'ActiveX), ainsi il n'est pas difficile de les travailler autour. Dans la vue d'ensemble suivante du XMLHttpRequest api, la syntaxe de Mozilla pour l'instantiation de XMLHttpRequest est employée. Si vous voulez courir les exemples dans l'IE, vous devez remplacer nouveau XMLHttpRequest() ; avec l'un ou l'autre nouvel ActiveXObject("MSXML2.XMLHTTP.3.0") ; ou la pleine méthode d'instantiation de cross-navigateur montrée dans la section de "Cross-navigateur XMLHttpRequest" de cet article.
XMLHttpRequest est la méthode plus-utilisée pour des communications d'AJAX parce qu'il fournit deux dispositifs uniques. Le premier dispositif fournit la capacité de charger le nouveau contenu sans ce contenu étant changé de quelque façon, qui le rend extrêmement facile d'adapter AJAX dans vos modèles normaux de développement. Le deuxième dispositif permet au Javascript de faire des appels synchrones. Un appel synchrone arrête toutes autres opérations jusqu'à ce qu'il soit complet, et alors que ce n'est pas une option qui est habituellement employée, il peut être utile dans les cas dans lesquels la demande courante doit être accomplie avant que d'autres mesures soient prises.
La méthode ouverte est employée pour placer le type de demande (OBTENEZ, SIGNALEZ, MIS, ou PROPFIND), le URL de la page étant demandée, et si l'appel sera asynchrone. Un username et un mot de passe pour l'authentification de HTTP peuvent également être sur option passés. Le URL peut être un chemin relatif (tel que page.html) ou complet qui incluent l'adresse du serveur (telle que http://blog.joshuaeichorn.com/page.html). La signature de base de méthode est :
Dans l'environnement de Javascript, les restrictions de sécurité sont en place. Ces restrictions de sécurité font jeter la méthode ouverte une exception si le URL est d'un domaine différent que la page courante. Les utilisations suivantes d'exemple ouvertes pour installer un synchrone OBTIENNENT la demande à index.html :
La méthode d'envoi établit le rapport au URL indiqué dans ouvert. Si la demande est asynchrone, l'appel la renverra immédiatement ; autrement, l'appel bloquera davantage d'exécution jusqu'à ce que la page ait été téléchargée. Si le type de demande est POTEAU, la charge utile sera envoyée comme corps de la demande qui est envoyée au serveur. La signature de méthode est :
Quand vous faites une demande de POTEAU, vous devrez placer le Contenu-type en-tête. De cette façon, le serveur sait quoi faire avec le contenu téléchargé. À l'imitateur envoyant une forme à l'aide du POTEAU de HTTP, vous avez placé le type content à application/x-www-form-urlencoded. Les données d'URLencoded sont le même format que vous voyez dans un URL après "?". Vous pouvez voir un exemple de ces données codées en faisant une forme et en plaçant sa méthode POUR OBTENIR. L'exemple suivant montre une demande synchrone de POTEAU à index.php qui envoie une charge utile d'URLencoded. S'index.php contient < le ?php var_dump($_POST) ; ? >, vous pouvez voir les données soumises traduites comme si c'est une forme normale dans l'alerte :
Il y a beaucoup de différents cas dans lesquels le réglage d'un en-tête sur une demande pourrait être utile. L'utilisation la plus commune du setRequestHeader() doit placer le Contenu-type, parce que la plupart des applications de Web savent déjà traiter certains types, tels qu'uRLencoded. La signature de méthode de setRequestHeader prend deux paramètres : l'en-tête à placer et sa valeur :
Puisque les demandes envoyées en utilisant XMLHttpRequest envoient les mêmes en-têtes standard, y compris des en-têtes de biscuit et des en-têtes d'authentification de HTTP, comme une demande normale de navigateur, le nom d'en-tête sera habituellement le nom de l'en-tête de HTTP que vous voulez dépasser. En plus des en-têtes de dépassement de défaut, le setRequestHeader est utile pour placer la coutume, en-têtes spécifiques à l'application. Des en-têtes faits sur commande sont généralement mis en tête avec le x pour les distinguer de la norme ceux. L'exemple suivant fait un synchrone OBTENIR la demande ajoutant un en-tête appelé X-foo à test.php. Si test.php contient < le ?php var_dump($_SERVER) ; ? >, vous verrez l'en-tête soumis dans l'alerte :
La méthode de geTResponseHeader vous permet d'obtenir un en-tête simple de la réponse ; c'est particulièrement utile quand tout que vous avez besoin est un en-tête comme le Contenu-type ; notez que l'en-tête indiqué est cas-peu sensible. La signature de méthode est comme suit :
les getAllResponseHeaders renvoie tous les en-têtes de la réponse dans une corde simple ; c'est utile pour corriger ou rechercher une valeur. L'exemple suivant fait un synchrone OBTENIR la demande à test.html. Quand le client reçoit une réponse, le Contenu-type est alerté et tous les en-têtes sont alertés :
Tous les navigateurs appliquent une méthode d'abort(), qui est employée pour décommander une demande asynchrone en cours. (un exemple de ceci est montré dans la section "envoyant demandes asynchrones" en cet article.) les navigateurs Mozilla-basés offrent également quelques méthodes supplémentaires sur l'api de base ; par exemple, l'addEventListener() et le removeEventListener() fournissent une manière d'attraper des événements de statut sans employer dessus * les propriétés. Il y a également une méthode d'overrideMimeType() qui des marques il possible de forcer le Contenu-type à text/xml de sorte qu'il soit analysé dans un document de DOM même si le serveur ne le rapporte pas en tant que tels. Les méthodes Mozilla-spécifiques peuvent être utiles dans certaines circonstances, mais dans la plupart des cas, vous devriez rester loin d'elles parce que non tous les navigateurs les soutiennent.
XMLHttpRequest fournit un certain nombre de propriétés qui fournissent des informations ou des résultats sur la demande. La plupart des propriétés sont art de l'auto-portrait-explanatory ; vous lisez simplement la valeur et agissez là-dessus. Dessus * les propriétés sont des traiteurs d'événement qui sont employés en leur assignant une fonction. Une liste de toutes les propriétés suit :
Note
Mozilla remet à zéro des traiteurs
d'événement, tels que l'onreadystatechange, après qu'une demande
soit accomplie, ainsi vous devez les remettre à zéro si vous faites
des appels multiples avec le même objet.
La table suivante montre les valeurs possibles pour la variable de readyState. Elle renverra un nombre représentant l'état actuel de l'objet. Chaque demande progressera par la liste de readyStates
| code de statut de readyState | Statut de l'objet de XMLHttpRequest |
|---|---|
| (0) UNINITIALIZED | L'objet a été créé mais pas initialisé. (la méthode ouverte ne s'est pas appelée.) |
| (1) CHARGEMENT | L'objet a été créé, mais la méthode d'envoi ne s'est pas appelée. |
| (2) CHARGÉ | La méthode d'envoi s'est appelée, mais le statut et les en-têtes ne sont pas encore disponibles. |
| (3) INTERACTIF | Quelques données ont été reçues. Appeler les propriétés responseBody et de responseText à cet état pour obtenir des résultats partiels renverra une erreur, parce que les en-têtes de statut et de réponse ne sont pas entièrement disponibles. |
| (4) ACCOMPLI | Toutes les données ont été reçues, et les données complètes sont disponibles dans les propriétés responseBody et de responseText. |
Le readyState variable et le traiteur d'événement d'onreadystatechange sont liés de telle manière que chaque fois que la variable de readyState est changée, le traiteur d'événement d'onreadystatechange s'appelle.
Online: 513 users browsing the articles directory
|
|