Pas besoin de recharger la page pour exécuter un script php??

Résolu
cs_Linuss Messages postés 176 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 9 mai 2008 - 1 nov. 2005 à 18:57
verdy_p Messages postés 202 Date d'inscription vendredi 27 janvier 2006 Statut Membre Dernière intervention 29 janvier 2019 - 17 janv. 2008 à 18:25
Bonjour à tous,

J'ai parfois vu quelques sites qui n'avaient pas besoin de recharger une page web pour exécuter un script php...
quelqu'un sait-il comment faire svp?? ca me parait très pratique
(ex: un text area me demande un pseudo a entrer, je change de text area, puis la page vérifie si le pseudo est valide, etc. mais sans recharger la page )

merci beaucoup,

++

6 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 nov. 2005 à 19:21
salut, un exemple :



<script type="text/javascript">

var MSIE=(navigator.appName=="Microsoft Internet Explorer")?true:false;

var load=false;

function css_change_1(){

reponse=R.responseText;

document.getElementById("css_style").innerHTML=reponse;

}

function css_change(theme){

var reponse;

if(MSIE){

R = new ActiveXObject("Microsoft.XMLHTTP") ;

}else{

R = new XMLHttpRequest();

}

R.open("POST", "style.php", true);

R.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

R.onreadystatechange = css_change_1;

R.send("theme="+theme);

}

</script>




bon, ici, il faut dire que j'ai fait :



<style type="text/css" media="screen" id="css_style">



et que ça aide un peu...



Bon, pour le reste, on se revoi sur le forum javascript ^^




In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
3
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
1 nov. 2005 à 20:45
Re-...



Oui, je peux te diriger vers les tutoriaus qui m'ont fait apprendre le
truc nommé aujourd'hui "AJAX", mais qui existe en fait depuis 1996... !
(pourquoi tant d'attente pour utiliser une méthode aussi simple, belle
et pratique ?)



Dans l'ordre où il faut les aborder :

1.http://www.framasoft.net/article3991.html

2.http://www.toutjavascript.com/savoir/xmlhttprequest.php3



Puis, avant que tu n'essaye de te faire des moteurs AJAX, sache qu'il en existe déjà plein qui te tendent les bras :

* sajax (très simple, peut-être trop... car du coup, usage limité)

* xajax (chercher sur sourceforge => j'ai adapté ce moteur pour me créer le mien "jgajax" :) )

* ajaxAC (super complet, voir super complex !!! (voir trop). Le
moteur Ajax le plus puissant que j'ai trouvé... développé par
www.apache.org)



Peut-être coucou747 en à trouvé d'autres, plus intéressant. Et du coup, ça m'intéresse aussi...



A+



(quand deux yeux se rencontrent...)
3
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
1 nov. 2005 à 19:06
Salut,



Effectivement, c'est la grande mode en ce moment... Et j'en suis une des victimes. Faut dire que c'est bien :)



Qu'est-ce qiu est bien ? Ben l'utilisation conjointe du javascript (objet XmHTTPRequest) et de l'XML !!!



En anglais, ça donne AJAX (Asynchronous Javascript And Xml).



Le principe :

Javascript, via l'objet xmlhttprequest, envoi une requète HTTP toute
bète en arrière plan. La réponse de ton script sera lue par une
fonction Javascript (et non par ton navigateur). C'est ici que réside
la difficulté! D'où la nécessité d'être précis sur le format de la
réponse. XML est une bonne base pour ce faire...





Je te laisse aller voir quelques tutoriaux à ce sujet.

Bonne lecture,



A+
0
cs_Linuss Messages postés 176 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 9 mai 2008
1 nov. 2005 à 19:27
merci c'est cool :)
par contre, vous n'auriez pas de bons tutoriaux sur ajax ou le xmlhttprequest svp??
merci beaucoup
ps : ca me donne tout plein d'idées ce pitit truc ajax ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Linuss Messages postés 176 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 9 mai 2008
1 nov. 2005 à 21:52
merci J_G et coucou :)
je vais voir de quoi ca parle, ca a l'air bien intéressant ;)

++ et encore merci
0
verdy_p Messages postés 202 Date d'inscription vendredi 27 janvier 2006 Statut Membre Dernière intervention 29 janvier 2019
17 janv. 2008 à 18:25
Pour finalement comprendre pourquoi un clic n'est pas nécessaire, il faut comprendre que cela nécessite un complément de support du côté du navigateur; tout est dans le support du composant XmlHttpRequest, qui est un composant actif (donc soumis à des restrictions de sécurité).Il faut déjà parvenir à le charger dans une page du navigateur, et l'activer, ce qui n'est pas garanti.
Mais une fois qu'il est activé, on peut l'instancier, ce qui crée un thread dans le navigateur, prêt à s'exécuter quand on lui aura fourni une requête à effectuer.
La requête n'est pas forcément une requête XML (quoi qu'en dise son nom), mais n'importe quelle requête HTTP; on fournit l'URL à charger, les paramètres (pour les requêtes de type GET, il faut les passer dans l'URL au format URLencodé, mais attention aux contraintes de taille maxi d'URL, éviter GET si les données à fournir sont volumineuses, par exemple si elles viennent d'un formulaire de saisie de texte comme un message à envoyer ou des commentaires en ligne, dans ce cas il faut utiliser la méthode POST et passer les paramètres séparément de l'URL, via les méthodes de l'objet XmlHttpRequest.

Une fois les paramètres et l'URL codés correctement et fournis, on demande à l'objet de s'exécuter: le thread sera lancé dans le navigateur qui se chargera d'effectuer la requête en se connectant au serveur (attention: si l'URL indiquée va vers un autre serveur que la page, votre requête peut être bloquée par le navigateur qui cherchera à bloquer les scripts méchants et invisibles cherchant à détourner des données: il y a des virus qui cherchent à contaminer les pages chargées depuis certains sites, en y ajoutant un bout de javascript qui va vouloir exécuter des requêtes via XmlHttpRequest, pour détourner les données que vous saisissez sur le site que vous visiter pour les envoyer à un autre site). Des restrictions imposent donc d'effectuer la requête dynamique XmlHttpRequest vers le même domaine que la page HTML affichée dans la frame courante du navigateur (et des restrictions pour accéder aux données de formulaires ou schéma DOM affiché dans les autres frames si elles ne sont pas dans le même domaine que la frame courante, car sinon le risque d'hameçonnage sera trop facile via un site faisant exécuter sa requête XmlHttpRequest depuis une frame invisible cherchant à accéder aux données que vous saisissez dans une frame principale affichant votre site sensible préféré).

La requête XmlHttpRequest ne peut pas se terminer tout de suite: votre javascript se termine, mais la requête continue en arrière-plan dans un thread du navigateur. Quand la réponse est parvenue, le composant XmlHttpRequest va générer un évènement Javascript vers l'élément de la page que vous lui avez indiqué. C'est dans ce nouveau javascript présent dans la page que vous récupérez la réponse obtenue, stockée dans la variable contenant votre objet XmlHttpRequest; il ne reste plus qu'à afficher ou traiter la réponse obtenue pour l'insérer dans la page actuelle avec les fonctions Javascript du DOM.

Ceci dit, pour maitriser tout ça, la programmation est assez complexe car il faut programmer simulatanément des pages PHP sur le serveur pour intercepter et traiter les requêtes AJAX, mettre dans les pages PHP le code HTML des pages, programmer le javascript qui va s'exécuter sur le navigateur, maitriser le DOM de la page HTML elle-même, jongler avec les codages de paramètres (et s'assurer aussi du codage du text que vous lui soumettez, et s'assurer que le serveur utilise aussi le bon codage pour décoder vos paramètres.


Mais rien de tout ça ne fonctionnera, si le navigateur ne supporte pas XmlHttpRequest (ou si le composant ActiveX qui le supporte est désactivé dans un navigateur IE), ou si Javascript est désactivé (car alors pas moyen même de déclencher les évènements de mise à jour dynamique. Penser donc à garder votre site opérationnel sans Javascript, via des formulaires plus classiques accessibles avec un clic normal sur un bouton d'envoi de formulaire.


Et AJAX ne dispense pas, même s'il fonctionne de faire des contrôles de validité des paramètres et de synchronisation des requêtes entre elles afin de s'assurer qu'elles proviennent de la bonne session (éviter les attaques par reproduction de requête.) il peut être donc nécessaire de fournir dans la requête XmlHttpRequest un paramètre donnant la valeur d'une variable de session unique et de son état (que le serveur va vérifier), et surtout vérifier à chaque fois sur le serveur la validité de tous les paramètres que vous allez prendre en compte (ne pas croire que les contrôles faits du coté client en Javascript vont suffire, même s'ils peuvent être utiles pour réduire la charge sur le serveur en lui évitant d'avoir à traiter trop de requêtes inutiles tant qu'un formulaire n'est pas complet et dans un format acceptable): votre script PHP sur le serveur doit toujours tous les revérifier si le serveur va générer des données critiques ou accéder et renvoyer à des infos personnelles sur votre utilisateur, car il ne doit pas les renvoyer à n'importe qui!

Note: XmlHttpRequest supporte aussi les requêtes via HTTPS pour les transactions sécurisées, mais c'est plus compliqué à faire si la page HTML principale n'est pas aussi en HTTPS sur le même domaine. On évitera de méler HTTP et HTTPS, et de mélanger les noms de domaines entre la page principale les les requêtes AJAX.
0
Rejoignez-nous