J'aimerais savoir comment utiliser XMLHttpRequest pour charger le contenu d'une URL distante et que le code HTML du site auquel vous avez accédé soit stocké dans une variable JS.
Dis, si je voulais charger et alerter () le code HTML de http://foo.com/bar.php , comment pourrais-je le faire?
Vous pouvez l'obtenir par XMLHttpRequest.responseText
dans XMLHttpRequest.onreadystatechange
lorsque _XMLHttpRequest.readyState
_ est égal à _XMLHttpRequest.DONE
_.
Voici un exemple (non compatible avec IE6/7).
_var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
}
xhr.open('GET', 'http://example.com', true);
xhr.send(null);
_
Pour une meilleure compatibilité entre navigateurs, non seulement avec IE6/7, mais également pour couvrir certaines fuites de mémoire ou certains bugs propres au navigateur, et pour une utilisation moins verbeuse des requêtes ajaxiques, vous pouvez utiliser jQuery .
_$.get('http://example.com', function(responseText) {
alert(responseText);
});
_
Notez que vous devez prendre en compte le politique de même origine pour JavaScript lorsque vous ne l'exécutez pas sur localhost. Vous voudrez peut-être envisager de créer un script proxy sur votre domaine.
Je suggérerais de regarder dans fetch
. C'est l'équivalent ES5 et utilise Promises. Il est beaucoup plus lisible et facilement personnalisable.
const url = "https://stackoverflow.com";
fetch(url)
.then(
response => response.text() // .json(), etc.
// same as function(response) {return response.text();}
).then(
html => console.log(html)
);
Dans Node.js, vous devez importer fetch
en utilisant:
const fetch = require("node-fetch");
Si vous souhaitez l’utiliser de manière synchrone (ne fonctionne pas dans le top scope):
const json = await fetch(url)
.then(response => response.json())
.catch((e) => {});
Plus d'informations:
La façon simple d'utiliser XMLHttpRequest
avec pure JavaScript
. Vous pouvez définir custom header
mais il est facultatif et utilisé en fonction des besoins.
window.onload = function(){
var request = new XMLHttpRequest();
var params = "UID=CORS&name=CORS";
request.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
}
};
request.open('POST', 'https://www.example.com/api/createUser', true);
request.setRequestHeader('api-key', 'your-api-key');
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send(params);
}
Vous pouvez envoyer des paramètres en utilisant la méthode POST.
Veuillez exécuter l'exemple ci-dessous et vous obtiendrez une réponse JSON.
window.onload = function(){
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
}
};
request.open('GET', 'https://jsonplaceholder.typicode.com/users/1');
request.send();
}
Dans XMLHttpRequest
, utiliser XMLHttpRequest.responseText
peut déclencher l'exception comme ci-dessous
Failed to read the \'responseText\' property from \'XMLHttpRequest\':
The value is only accessible if the object\'s \'responseType\' is \'\'
or \'text\' (was \'arraybuffer\')
Meilleure façon d'accéder à la réponse de XHR comme suit
function readBody(xhr) {
var data;
if (!xhr.responseType || xhr.responseType === "text") {
data = xhr.responseText;
} else if (xhr.responseType === "document") {
data = xhr.responseXML;
} else {
data = xhr.response;
}
return data;
}
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
console.log(readBody(xhr));
}
}
xhr.open('GET', 'http://www.google.com', true);
xhr.send(null);