Comment faire un appel AJAX en utilisant JavaScript, sans utiliser jQuery ?
@Fractaliste Si vous appelez simplement les callbacks après les blocs if relatifs au xmlhttp.status, alors il suffit de les appeler là et vous avez terminé.
Comment faire un appel AJAX en utilisant JavaScript, sans utiliser jQuery ?
Avec le JavaScript "vanille" :
<script type="text/javascript">
function loadXMLDoc() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == XMLHttpRequest.DONE) { // XMLHttpRequest.DONE == 4
if (xmlhttp.status == 200) {
document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
}
else if (xmlhttp.status == 400) {
alert('There was an error 400');
}
else {
alert('something else other than 200 was returned');
}
}
};
xmlhttp.open("GET", "ajax_info.txt", true);
xmlhttp.send();
}
</script>
Avec jQuery :
$.ajax({
url: "test.html",
context: document.body,
success: function(){
$(this).addClass("done");
}
});
@Fractaliste Si vous appelez simplement les callbacks après les blocs if relatifs au xmlhttp.status, alors il suffit de les appeler là et vous avez terminé.
Wade, je pense que Gokigooooks dit que quand il a lu Avec JavaScript "vanille il pensait que c'était une bibliothèque JavaScript qu'il devait télécharger. Il pourrait aussi faire référence à Vanille JS .
En utilisant le code suivant, vous pouvez faire des choses similaires assez facilement, comme ceci :
ajax.get('/test.php', {foo: 'bar'}, function() {});
Voici l'extrait :
var ajax = {};
ajax.x = function () {
if (typeof XMLHttpRequest !== 'undefined') {
return new XMLHttpRequest();
}
var versions = [
"MSXML2.XmlHttp.6.0",
"MSXML2.XmlHttp.5.0",
"MSXML2.XmlHttp.4.0",
"MSXML2.XmlHttp.3.0",
"MSXML2.XmlHttp.2.0",
"Microsoft.XmlHttp"
];
var xhr;
for (var i = 0; i < versions.length; i++) {
try {
xhr = new ActiveXObject(versions[i]);
break;
} catch (e) {
}
}
return xhr;
};
ajax.send = function (url, callback, method, data, async) {
if (async === undefined) {
async = true;
}
var x = ajax.x();
x.open(method, url, async);
x.onreadystatechange = function () {
if (x.readyState == 4) {
callback(x.responseText)
}
};
if (method == 'POST') {
x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
x.send(data)
};
ajax.get = function (url, data, callback, async) {
var query = [];
for (var key in data) {
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
}
ajax.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, async)
};
ajax.post = function (url, data, callback, async) {
var query = [];
for (var key in data) {
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
}
ajax.send(url, callback, 'POST', query.join('&'), async)
};
C'est un excellent point de départ, mais je pense qu'il vous manque quelque chose qui figure dans la réponse de @3nigma. C'est-à-dire que je ne suis pas sûr de l'intérêt de faire certaines requêtes (toutes get et certaines post) sans renvoyer la réponse du serveur. J'ai ajouté une autre ligne à la fin de la méthode send : -- return x.responseText;
-- et ensuite retourner chacun des ajax.send
appels.
@Sam vous ne pouvez [typiquement] pas renvoyer car il s'agit d'une requête asynchrone. Vous devez traiter la réponse dans un callback.
@Sam il y a un exemple là-dedans : ajax.get('/test.php', {foo: 'bar'}, function(responseText) { alert(responseText); });
Vous pouvez utiliser la fonction suivante :
function callAjax(url, callback){
var xmlhttp;
// compatible with IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
callback(xmlhttp.responseText);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
Vous pouvez essayer des solutions similaires en ligne sur ces liens :
Il serait également intéressant d'ajouter une variable d'entrée pour la demande (qui sera utilisée dans xmlhttp.send(request) ;).
@PavelPerna, puisque l'exemple ici est une GET
Mais pour être plus général, je suis d'accord avec vous, j'ai vraiment pensé à mettre à jour la réponse pour accepter les paramètres de la requête comme paramètre de la fonction ici, et aussi pour passer la méthode ( GET
o POST
), mais ce qui m'a arrêté, c'est que je veux que la réponse soit aussi simple que possible pour que les gens puissent l'essayer aussi vite que possible. En fait, j'ai détesté certaines autres réponses qui étaient trop longues parce qu'elles essayaient d'être parfaites :)
@kenansulayman Qu'est-ce qui ne va pas avec les appels synchrones ? Parfois, c'est ce qui convient le mieux.
Vous pouvez obtenir l'objet correct en fonction du navigateur avec
function getXmlDoc() {
var xmlDoc;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlDoc = new XMLHttpRequest();
}
else {
// code for IE6, IE5
xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlDoc;
}
Avec le bon objet, un GET peut être abstrait :
function myGet(url, callback) {
var xmlDoc = getXmlDoc();
xmlDoc.open('GET', url, true);
xmlDoc.onreadystatechange = function() {
if (xmlDoc.readyState === 4 && xmlDoc.status === 200) {
callback(xmlDoc);
}
}
xmlDoc.send();
}
Et un POST à :
function myPost(url, data, callback) {
var xmlDoc = getXmlDoc();
xmlDoc.open('POST', url, true);
xmlDoc.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlDoc.onreadystatechange = function() {
if (xmlDoc.readyState === 4 && xmlDoc.status === 200) {
callback(xmlDoc);
}
}
xmlDoc.send(data);
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
23 votes
Veuillez noter que, bien que de nombreuses réponses suggèrent d'écouter prêt changement d'état Les navigateurs modernes prennent désormais en charge l'option charge , abandonner , progrès y erreur des événements pour XMLHttpRequest (vous ne vous soucierez probablement que de charge cependant).
2 votes
@ImadoddinIbnAlauddin par exemple lorsque sa principale fonctionnalité (traversée du DOM) n'est pas nécessaire.
9 votes
vousn'avezpasbesoindejquery.com beaucoup d'exemples de js purs, y compris ajax pour ie8+, ie9+ et ie10+.
2 votes
W3schools propose une bonne introduction pas à pas à ajax sans jquery : w3schools.com/js/js_ajax_intro.asp
0 votes
Vous pouvez également utiliser EHTML : github.com/Guseyn/EHTML Utilisation de l'élément e-json pour récupérer le json et le mettre en correspondance avec l'élément html.