web-dev-qa-db-fra.com

Qu'est-ce que 'xmlhttp.setRequestHeader ();' et dans quelles situations est-il utilisé?

Je suis tombé sur cette commande tout en apprenant AJAX. Le gars qui a fait le tutoriel n'a pas expliqué cette commande, que signifient les paramètres à l'intérieur de la commande et à quoi sert-elle ... Voici le code dans lequel je l'ai utilisé:

<script type="text/javascript">

        function insert(){
            if(window.XMLHttpRequest){
                xmlhttp = new XMLHttpRequest();
            }else{
                xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
            };

            xmlhttp.onreadystatechange = function(){
                if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
                    document.getElementById('message').innerHTML = xmlhttp.responseText;
                };  
            };

            parameters = 'insert_text='+document.getElementById('insert_text').value;

            xmlhttp.open('POST','ajax_posting_data.php',true);
            xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
            xmlhttp.send(parameters);
        };

    </script>
18
oFca

HTTP est un protocole. Une partie de ce protocole est le concept des en-têtes de demande. Lorsqu'une xhr se produit, du texte est échangé entre le client et le serveur. Les en-têtes de demande font partie du texte que le client envoie au serveur.

Il s'agit d'un moyen de définir les en-têtes de demande. Les arguments que vous voyez sont

1) l'en-tête à définir (dans ce cas, Content-type )
2) la valeur d'en-tête. (dans ce cas, x-www-form-urlencoded )

Voir ceci pour plus d'informations.

19
hvgotcodes

C'est exactement ce qu'il dit. Il définira une information "en-tête" pour le prochain XMLHttpRequest.

Un en-tête est à peu près une paire clé/valeur. Il est utilisé pour transmettre des "méta" informations au serveur cible pour la requête en cours. Dans votre cas particulier, son utilisé pour indiquer au serveur quel type de contenu est utilisé pour cette demande.

3
jAndy

Les requêtes HTTP sont des messages transmis d'un système informatique à un autre selon une routine définie (un "protocole" - ici [~ # ~] h [~ # ~] yper [~ # ~] t [~ # ~] ext [~ # ~] t [~ # ~] transférer [~ # ~] p [~ # ~] rotocol) afin de faire des choses comme envoyer des données, demander que les données soient renvoyées, mettre à jour les données précédemment envoyées, etc.

Un en-tête est essentiellement une information sur les données dans le corps de la requête HTTP. Son but est d'indiquer à la machine qui reçoit la demande quel type de données est contenu dans le corps de la demande, sa mise en forme, la langue utilisée, s'il s'agit de paramétrer un cookie, la date, la machine hôte, etc.

Plusieurs en-têtes peuvent être placés sur une requête HTTP et chaque en-tête a un composant "nom" et "valeur". Sur les pages Web, ils ressemblent

<meta name="........" content="............."/>

et vous les trouvez juste en dessous du haut de la page Web dans l'élément.

Pour permettre aux utilisateurs d'envoyer des requêtes HTTP à partir d'une fonction JavaScript, nous créons un nouvel objet XMLHttpRequest, tout comme votre code le fait avec

xmlhttp = new XMLHttpRequest();

À ce nouvel objet vide, vous avez l'intention d'ajouter des données. Malgré son nom, XMLHttpRequest permet également d'envoyer des données dans un certain nombre de formats autres que XML, par ex. Code HTML, texte, JSON, etc. Dans votre exemple, chaque nom de données sera séparé de sa valeur par un caractère "=" et chaque paire données/valeur sera séparée de la paire suivante par un caractère "&". Ce type de formatage est appelé codage d'URL.

Nous devons dire à l'ordinateur récepteur comment les données du corps de la requête HTTP sont codées. Il y a un en-tête standard pour transmettre cela et il est ajouté à la demande via la méthode setRequestHeader (..) . Cette méthode utilise 2 paramètres, le nom de l'en-tête et la valeur de l'en-tête. Toute cette opération est réalisée en ligne

xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

Cette méthode setRequestHeader (..) doit être appliquée à la demande après la requête est caractérisée par la méthode ouverte (...) mais avant la demande finale est envoyée avec la méthode send (.) .

La méthode open (...) définit: (1) le type de requête HTTP, par ex. GET/POST/PUT etc; (2) la page Web qui contient le script de gestion de cette demande, par ex. un fichier .php ou .js qui effectue la requête appropriée dans la base de données principale; et (3) la nature de la dynamique de la demande, par ex. les demandes asynchrones se voient attribuer la valeur "vrai", les demandes synchrones sont affectées "faux".

La méthode send (.) attache les données à envoyer dans le corps de la requête, dans votre cas la variable nommée 'paramètres'.

Sur votre question plus large de quelles situations setRequestHeader (..) est utilisé, je dirais qu'il est utilisé dans la plupart des situations de requête HTTP. Mais certains types de données les données ajoutées au corps d'une demande HTTP appellent un paramètre par défaut pour l'en-tête 'Content-Type'.

1
Trunk

Il définit l'en-tête HTTP Content-type pour contenir les données encodées en URL envoyées à partir d'un formulaire.

0
JanL