Script js, ordre des instructions

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Script js, ordre des instructions

Re: Script js, ordre des instructions

par Stef » 08 mars 2010, 07:09

Super merci beaucoup Calimero! : D

Je me disais bien que y avait un truc spécial avec ce bloc de code... j'aurais dû commencé par chercher de ce côté.

Merci bien! : )

Re: Script js, ordre des instructions

par Calimero » 08 mars 2010, 00:33

Hello,

Quand tu écris ceci :

Code : Tout sélectionner

xhr_object.onreadystatechange = function() { // ................... }
Tu injectes du code éxécutable (le contenu de la function(){...}) dans une propriété (onreadystatechange) de l'objet xhr_object. C'est pas un concept dont on a l'habitude en php (bien qu'on dispose des closures, aka une fonction en tant que donnée, depuis php 5.3, ça reste encore assez nouveau et obscur).

Le code contenu dans cette fonction est éxécutable, mais pas directement éxécuté ;) (Pour qu'il soit éxécuté il faudrait que la fonction soit suivie de parenthèses). C'est javascript qui va l'éxécuter puisqu'il s'agit d'un évènement (il sait où trouver ce code pour aller l'éxécuter, mais ne cherche pas à savoir ce qu'il fait, ce qui te permet d'attacher à l'évènement un code personnalisé comme ici).

Pour bien placer ce code, les seules conditions à respecter sont que l'objet existe et que l'évènement ne se soit pas encore déclenché (à priori, à moins d'avoir une énooooorme quantité de code JS entre l'envoi de la requête en premier et l'attachement à l'évènement en second, n'importe quel endroit du script, postérieur à la création de l'objet, peut convenir).

Script js, ordre des instructions

par Stef » 07 mars 2010, 19:07

Bonjour à tous,


j'ai codé le petit script ci-dessous en suivant un tuto sur ajax:
function listtune(idsend) {
	
	var idposter = idsend;
	var xhr_object = null;

	if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();
	else if(window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	else {

		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
		return;

	}

	xhr_object.open("POST", "./listtune.php", true);
	

	xhr_object.onreadystatechange = function() {

		if(xhr_object.readyState == 4) {

			document.getElementById("listtune").innerHTML = xhr_object.responseText;

		}
		

	}
	
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data = "idposter=" + idposter;
	xhr_object.send(data);

}
La question qui me tracasse est est-ce que la partie ci-dessous...:
	xhr_object.onreadystatechange = function() {

		if(xhr_object.readyState == 4) {

			document.getElementById("listtune").innerHTML = xhr_object.responseText;

		}
		

	}
...ne devrait-elle pas se trouver après cette partie:
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data = "idposter=" + idposter;
	xhr_object.send(data);
Ce code fontionne parfaitement mais je ne comprends pas pourquoi ça fonctionne ainsi, alors que dans ma logique les deux parties citées ci-dessus devraient être inversées...

Merci d'éclairer ma lanterne et de donner un peu de repos à mes neurones! : )