AJAX ou PHP & JAVASCRIPT ?

Mygale13
Invité n'ayant pas de compte PHPfrance

16 sept. 2006, 22:56

J'utilise une methode différente pour recuperer des données sur le serveur sans recharger ma page.

Voici le fichier index.php3

Code : Tout sélectionner

<? session_start(); if (!isset($_SESSION['fois'])): $_SESSION['fois']=0; endif; $_SESSION['fois']++; print "Page affich&eacute;e : $_SESSION[fois] fois."; ?> <html> <!-- Date de création: 16/09/2006 --> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title></title> <script type="text/javascript" src="javascript.js"></script> </head> <body> <form action="villes.php3" method="post" target="envdonne"> <table> <tr> <td> Code Postal : </td> <td> <select name="CP" onchange="this.form.submit();"> <option value="" selected> </option> <option value="13127"> 13127</option> <option value="13700"> 13700</option> <option value="13500"> 13500</option> </select> </td> </tr> <tr> <td align="right"> Ville : </td> <td id="ici"> <input type="text" name="ville" size="20" maxlength="256" value="Aucune ville"> </td> </form> </tr> </table> <br><br> Rechargez la page en cliquant <a href="index.php3">ici<a>. <script> </script> </body> </html> <iframe style="visibility: hidden; position: absolute" name="envdonne"></iframe>
Voici le fichier javascript.js

Code : Tout sélectionner

function affichercode(code){ var ns4 = (document.layers)? true:false; /* Nescape 4 */ var ie4 = (document.all && !window.opera)? true:false; /* Internet Eplorer 4 */ var dom = (document.getElementById)? true:false; /* Nescape 6 ou Internet Eplorer 6 */ if (dom){document.getElementById("ici").innerHTML = code; return;} if (ie4){document.all["ici"].innerHTML = code; return;} if (ns4){ with (eval('document.'+"ici"+'.document')){open(); write(code); close();} return;}}
et Voici le fichier villes.php3

Code : Tout sélectionner

<? if ($_POST['CP']=="13127"): $ville="Vitrolles"; elseif ($_POST['CP']=="13700"): $ville="Marignane"; elseif ($_POST['CP']=="13500"): $ville="Martigues"; else: $ville="Aucune ville"; endif; print "<script>"; print "parent.affichercode('<input type=\"text\" name=\"ville\" size=\"20\" maxlength=\"34\" value=\"$ville\">');"; print "</script>"; ?>
Voila !

Bien sûre, c'est optimisable à souhait !!! :D

Bon je sais pas ce que ça vaut, mais moi ça me convient bien mieux que AJAX.

[email protected]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 sept. 2006, 00:16

Et tu est sûr que ça marche ? :-k

Si tu cliques sur le lien de la 1ère page (index.php) il n'y aura pas de variables POST dans "villes.php".

ça peut éventuellement fonctionner en passant par du javascript sur onclick dans la balise <a>.
Tu récupères la valeur de la liste en JS ouvre un popup vers "villes.php" en passant en paramètre la valeur précédente. Tu as donc une variable GET à renvoyer par JS en faisant comuniquer le popup et la fenetre parent. Pour finir tu peux fermer le popup.

Et puis si tu as 36 000 villes tu écris tout en dur ? :?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Petit nouveau ! | 3 Messages

17 sept. 2006, 00:36

Y a quand même un trus délirant que je rencontre sur tous les forums !

On me fait passer pour un boulet en me disant : " Ouai heu.... mais si ya 40000 villes heu.... tu vas toute les ecrires ???. pffff. :sick: "

Allons allons ... #-o

Donc je tiens a preciser que c'est un exemple des plus simple permettant de ce concentrer sur ce qui est interessant dans le script.

Donc pour l'info, j'aurai pu demarrer mon fichier ville.php3 comme ça :

Code : Tout sélectionner

if ($_POST[CP]): $resville=mysql_query("SELECT * FROM villes WHERE CP='$_POST[CP]' "); if ($resville): $nbville=mysql_num_rows($resville); if ($nbville>0): $lignville=mysql_fetch_array($resville); $ville=$lignville[VILLE]; endif; endif; endif;
Par exemple.... :!: :lol:

Mammouth du PHP | 19672 Messages

17 sept. 2006, 00:43

Ok, mais l'observation de Truc est tout de même pertinente : la France par exemple comporte une liste de plus de 35000 communes : comment pourrais-tu utiliser ce sysrème dans un tel cas.

Ceci dit, ton code est tout de même intéressant lorsqu'on utilise des listes moins lourdes. C'est pour cette raison que j'ai déménagé le sujet vers ce forum ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

17 sept. 2006, 00:53

Merci de l'attention que tu portes a mon script Cirano.

Moi aussi je le trouve tres interessant en fait. et d'une simplicité étonnante, en rapport a AJAX.

J'ai utilisé Mysql avec des base de plus de 80000 enregistrements, avec des temps de reponses incroyables.

Je pense que le temps d'acces aux données dépend du materiel de ton hébergeur. Pas de le taille de la base de données consultée !


Au sujet du post de Truc : Aucun popup n'est ouvert. Bien heureusement :)

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

17 sept. 2006, 10:08

La méthode de l'iframe invisible est ce qui se faisait quand il n'y avait pas Ajax. Ce n'est pas beaucoup plus simple une fois qu'on a fait l'effort de se plonger dans Ajax, mais c'est un peu moins propre :
- pas de gestion des erreurs serveurs (pas de possibilité de récupérer l'entête de la requête HTTP)
- généralement c'est tout cracra pas encapsulé dans une librairie et encore moins dans une classe (mais ça dépend de la façon dont la solution iframe est implémenté)
- ça pollue ta page en ajoutant une iframe qui n'est pas une part du contenu, mais un élément du comportement, spabien ;)

Mais bon en effet, ça marche normalement aussi bien (attention, la solution iframe ne marche pas mieux qu'ajax, c'est strictement équivalent, les temps de réponses seront exactement les mêmes, voire avec une petite préférence pour Ajax qui charge la page en mémoire mais ne la fait pas interpréter par le moteur du navigateur).