Un site en ajax et les fonctions javascript ?

Un site en ajax et les fonctions javascript ? - HTML/CSS - Programmation

Marsh Posté le 12-07-2008 à 21:24:20    

Salut
 
J'essai de developper un site tout en Ajax, qui est censé ne jamais se recharger, je passe donc par plusieurs fonction que voici :
 
Les fonctions javascript
Code :
 
 function file(fichier, mode){
 if(mode == "undefined" ){
  mode = "XML";
 }
 if(window.XMLHttpRequest) // FIREFOX
 xhr_object = new XMLHttpRequest();
 else if(window.ActiveXObject) // IE
 xhr_object = new ActiveXObject("Microsoft.XMLHTTP" );
 else
 return(false);
 xhr_object.open("GET", fichier, false);
 
 xhr_object.send(null);
 
 if(xhr_object.readyState == 4) {
  if(mode == "XML" ){
   return(xhr_object.responseXML);
  } else {
   return(xhr_object.responseText);
  }
 } else {
 return(false);
 }
 }
 
 function moteur(URL){
 document.getElementById("corpsDuSite" ).innerHTML = file(URL,"text" );
 }
 
L'appelle d'une fonction :
Code :
 
 
 <a href='#' onClick="moteur('moteur.php?page=accueil');">Retour à l'accueil</a>
 
La page moteur.php :
Code :
 
<?php
include('scripts/include.php');
 
if(isset($_GET['page']))
{
 switch($_GET['page'])
 {
  case'admin/accueil':include('admin/accueil.php');break;
  case'admin/formLive':include('admin/formLive.php');break;
  case'reunion':include('reunion.php');break;
  case'live':include('live.php');break;
  default:include('accueil.php');
 }
}
else  
{
 include('accueil.php');
}
 
?>
 
 
Et enfin je charge un page, voici un exemple :
 
Code :
 
 
<script>
function test(){
 alert('ça marche!');
}
</script>
<table border='1'>
 <tbody id="reunion">
  <tr>
   <th width='300'>Lieu</th><th>Date</th><th>Heure</th>
  </tr>
  <?php
   $i=0;
   $reunion1 = requete("select numReunion, lieu, DATE_FORMAT(date,'%d/%m/%Y') as date, DATE_FORMAT(date,'%H:%i') as heure from _jourj_Reunions order by numReunion asc" );
   while($reunion = mysql_fetch_object($reunion1)){
    echo "<tr id='".$reunion->numReunion."'>\n";
     $nbMessage1 = requete("select * from _jourj_MessagesLive where numReunion=".$reunion->numReunion);
     $nbMessage = mysql_num_rows($nbMessage1);
     if($nbMessage != 0){
      echo "<td><a href='#' onClick='moteur(\"moteur.php?page=live&numReunion=".$reunion->numReunion."\" )'>".$reunion->lieu."</a></td>\n";
     } else {
      echo "<td>".$reunion->lieu."</td>\n";
     }
     echo "<td><a href='#' onClick='test()'>".$reunion->date."</a></td>\n";
     echo "<td >".$reunion->heure."</td>\n";
    echo "</tr>\n";
    $i++;
   }
  ?>
 </tbody>
</table>
 
 
Sur la dernière page, quand on clique sur la date. La fonction "test()" devrai réagir, sauf qu'elle à été inclue en javascript dans ma div corpsDuSite et donc il doit lui manquer une sorte de compilation, le navigateur me revoit "test is not defined". J'ai j'ai la solution de charger toute les fonctions javascript dés le 1er chargement mais ne me plais qu'a moitié. Déjà ça peut faire crade comme codage et en + ça va mettre du temps à tout charger lors du 1er chargement.
 
Y a t'il un moyen "compiler" les fonctions incluse avec cette ligne : document.getElementById("corpsDuSite" ).innerHTML = file(URL,"text" ); ?
 
Vous pensez quoi de faire un site en ajax? Est ce que c'est vraiment utile ou c'est juste une forme de sadomasochisme?  
Merci d'avance !

Reply

Marsh Posté le 12-07-2008 à 21:24:20   

Reply

Marsh Posté le 12-07-2008 à 22:58:23    

Perso je pense que faire un site en Ajax ca n'existe pas, "Ajax" est une technique et pas un langage, ici le langage c'est le javascript.
 
Ensuite je pense que tu mélanges trop de truc à la fois : lorsuqe tu appelles une de tes pages, tu devrais plutot appeler une fonction PHP qui te renverrait le code HTML propre (càd dans du PHP dedans justement).
Je vais copier/coller ton code et voir pour ton soucis de fonction :)


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 12-07-2008 à 23:07:03    

En effet c'est un abus de langage, je veux dire un site utilisant l'ajax pour éviter le chargement...  
 
J'ai une page qui fait transition en PHP entre la page qui appelle la fonction et celle qui est appelée.

Reply

Marsh Posté le 13-07-2008 à 00:06:57    

Jai testé ton bout de code, et en effet ce qui il ya entre les tags script n'est pas du tout évalué.
 
En fait il suffit de créer ta fonction "test", ainsi que ttes autres fonctions susceptibles de réagir à un évenement, dans ton fichier principal. En plus pour le debug c'est bien plus pratique. Ceci dit on doit pouvoir arriver à un résultat similaire avec la fonction eval (), histoire de charger à la volée du code JS uniquement (càd qu'on sépare le code JS du HTML)


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 13-07-2008 à 00:42:45    

j'y ai bien pensé et je pense qu'au final je vais séparer le JS du HTML. Merci du coup de mains.

Reply

Marsh Posté le 13-07-2008 à 01:21:47    

SICKofitALL a écrit :

la fonction eval ()


 
[:dawak]
en général tes propos sont sensés mais là c est violemment nul
je n ai encore jamais vu une utilisation justifiée d eval, et surtout dans un langage client-side: c est une porte ouverte à toutes les failles imaginables
j avoue que je n'ai pas testé le code, mais c est sûr qu'eval n est PAS la solution


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
Reply

Marsh Posté le 13-07-2008 à 02:20:24    

non ce n'est pas la solution on est bien d'accord, eval n'est utile que pour le json... et encore !
 
mais dans le cas du code plus haut, on pourrait supposer utiliser eval apres extraction du code JS (un regExp sur le tag script ?) dans le responseText renvoyé par XHR, ca ferait une sorte de "include" à la sauce JS, et cela dans un cadre strictement maitrisé.
 
Mais sinon, c'est vrai, eval est à bannir d'un code qui se respecte :jap:


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 13-07-2008 à 02:36:13    

eval n a clairement rien a foutre dans le json
c est un format directement accessible
et les regex ont encore moins leur place dans le parsing!


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
Reply

Marsh Posté le 13-07-2008 à 03:01:33    

sauf erreur, eval est un moyen efficace (mais pas le seul) pour convertir le responseText du XHR en qqch de compréhensible par JS, avec un eval donc, car sinon ce n'est PAS accessible directement...

Code :
  1. var json = eval ('(' + xhr.responseText + ')');


 
Et pour le parsing... quoi de mieux que les expressions régulières pour le parsing ? Ou alors on parle pas de la même chose ;)


Message édité par SICKofitALL le 13-07-2008 à 03:04:17

---------------
We deserve everything that's coming...
Reply

Marsh Posté le 13-07-2008 à 03:10:21    

erreur!
c est exactement le but du JSON: etre accessible sans transformation
 
pour le parsing ce n est clairement pas le but du js, meme si ca reste bien sur possble (c est evidemment le moyen le plus rapide pour un RTE,  mais c est probablement la seule entorse :/)
 
dans tous les cas je t invite sur bla²@web des tas de gens moins competents que toi y interviennent :P


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
Reply

Marsh Posté le 13-07-2008 à 03:10:21   

Reply

Marsh Posté le 13-07-2008 à 03:20:05    

héhé j'y vais de ce pas :D


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 13-07-2008 à 10:48:44    

Bon je met quoi alors?

Reply

Marsh Posté le 13-07-2008 à 11:05:48    

J'ai lu que faire un site en ajax pouvait poser des problèmes, notamment ceux ci :  
Tu perds la possibilité de garder les pages en favoris.
Les refresh via le navigateur ne fonctionneront pas.
 
Existe t'il une liste plus exhaustive des soucis? Sinon j'ai trouvé cette page : http://www.developpez.net/forums/s [...] p?t=584846 qui me semble intéressante. Bref j'hésite à faire le site en ajax même si ça fait bien.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed