méthode split (js)

méthode split (js) - HTML/CSS - Programmation

Marsh Posté le 02-12-2005 à 11:02:59    

Bonjour tout le monde,
 
Dans le cadre de la mise en place d'AJAX pour créer un petit panneau utilisateur je recois les informations de ma page ajax.php en mode texte...mais comme j'ai besoin de recevoir plusieur infos je renvoie infos1#infos2#infos3....et dans mon script js je fait un split("#" ). Le problème c'est quand une des info contient un espace...il a l'air de spliter au niveau de l'espace. J'ai beau faire un escape avant de spliter et de faire split("%(code du diese)" )ca ne marche toujours pas.
 
LA version avec escape

Code :
  1. ajax_object.onreadystatechange = function() {
  2.                 if(ajax_object.readyState == 4) {
  3.                         var resultat = escape(ajax_object.responseText)
  4.                         reponse = resultat.split("%23" );
  5.                         if(unescape(reponse[0]) == 0)
  6.                                 document.getElementById("pannel_control" ).innerHTML = '<p>'+unescape(reponse[1])+'</p>';
  7.                         else if(unescape(reponse[0]) == 1) {
  8.                                 var infos = '<div class="infos">';
  9.                                 infos += '<p align="center">' +unescape(reponse[4])+ '</p>';
  10.                                 infos += '<table>';
  11.                                 infos += '<tr><th>Victoires</th><th>Défaites</th></tr>';
  12.                                 infos += '<tr><td>' +unescape(reponse[1])+ '</td><td>' +unescape(reponse[2])+ '</td></tr>';
  13.                                 infos += '</table>';
  14.                                 infos += '</div>';
  15.                                 document.getElementById("pannel_control" ).innerHTML = '<h4>'+unescape(reponse[5])+'</h4>';
  16.                                 document.getElementById("pannel_info" ).innerHTML = bouton+'<br/><div class="avatar"><img src="http://www.fallengalaxy.com/images/avatar/'+unescape(reponse[3])+'"/></div>'+infos;
  17.                         }
  18.                         else
  19.                                 document.getElementById("pannel_control" ).innerHTML = '<p>'+unescape(reponse[1])+'</p>';
  20.                 }
  21.         }</code>


 
La version sans

Code :
  1. ajax_object.onreadystatechange = function() {
  2.                 if(ajax_object.readyState == 4) {
  3.                         var reponse = ajax_object.responseText.split("#" );
  4.                         if(reponse[0] == 0)
  5.                                 document.getElementById("pannel_control" ).innerHTML = '<p>'+reponse[1]+'</p>';
  6.                         else if(reponse[0] == 1) {
  7.                                 var infos = '<div class="infos">';
  8.                                 infos += '<p>' +reponse[4]+ '</p>';
  9.                                 infos += '<table>';
  10.                                 infos += '<tr><th>Victoires</th><th>Défaites</th></tr>';
  11.                                 infos += '<tr><td>' +reponse[1]+ '</td><td>' +reponse[2]+ '</td></tr>';
  12.                                 infos += '</table>';
  13.                                 infos += '</div>';
  14.                                 document.getElementById("pannel_control" ).innerHTML = '<h4>'+reponse[5]+'</h4>';
  15.                                 document.getElementById("pannel_info" ).innerHTML = bouton+'<br/><div class="avatar"><img src="http://www.fallengalaxy.com/images/avatar/'+reponse[3]+'"/></div>'+infos;
  16.                         }
  17.                         else
  18.                                 document.getElementById("pannel_control" ).innerHTML = '<p>'+reponse[1]+'</p>';
  19.                 }
  20.         }


 
Pour ceux qui veulent tester <lien>http://www.fallengalaxy.com/test</lien> puis ouvrez le pannel a gauche du site. login: test@fallengalaxy.com pass: test et ensuite le pseudo choisit doit apparaitre sous la ligne or il s'arrête a l'espace ("Test Pannel" normalement et la ca fait "test" seulement)

Reply

Marsh Posté le 02-12-2005 à 11:02:59   

Reply

Marsh Posté le 02-12-2005 à 11:27:58    

D'abord split fonctionne très bien ( même avec # ou des espaces).
Preuve cette petite fonction vite fait:

Code :
  1. function t(){
  2.     var string = "a#b#c#d #e#f";
  3.     var arr= string.split(/#/);
  4.     for (i=0; i<arr.length; i++){
  5.       alert("["+arr[i]+"]" );
  6.     }
  7.   }


Donc je pense que c'est plutot ton retour du serveur qu'est pas top.
 
Ensuite sur le lien que tu donnes, moi le partie gauche elle se déploit pas (suis sur FF1.5 et j'ai erreur js: maximize is not defined)
 
Einfin alors déjà le X dans Ajax c'est pour XML, tu n'es donc pas censé renvoyé du texte séparé par des # :o

Reply

Marsh Posté le 02-12-2005 à 11:29:31    

AJAX, c'est pas une technique métant en oeuvre un dialogue page web/serveur par demande de fichier XML?
 
Dans ce cas pourquoi concaténer a l'aide de # alors qu'en XML, il suffit de faire un

Code :
  1. <machin>donnée1</machin><machin>donnée2</machin><machin>donnée3</machin><machin>donnée4</machin>

ou mieux un

Code :
  1. <machin html="donnée1" reponse="donnée2" image="donnée3" info="donnée4" />

et récupérer les données comme pour tout fichier xml.

Reply

Marsh Posté le 02-12-2005 à 11:37:43    

Pour le xml je suis d'accord mais je ne me suis pas encore penché sur la chose donc pour le moment je fais ça en texte...
 
Et si le split marche alors...je vais continuer de voir ce qui ne va pas ^^
 
Merci quand même

Reply

Marsh Posté le 02-12-2005 à 12:18:51    

Mais si tu fais ça avec de simpels fichiers texte pas XML, alors tu ne fait pas d'AJAX du tout même si t'as un objet ou une classe nomé "ajax_object".

Reply

Marsh Posté le 02-12-2005 à 12:33:22    

Oui mais j'utilise le meme principe ^^
 
En attendant j'ai réolu mon problème...il ne se situait pas du tout ou je pensais. Il se produisait lorsqu'il j'affichais mon forulaire d'option pour choisir le compte...il n'acceptait pas les espace dans value ( <option value=""> ) et donc il allait me chercher un autre membre^^.
 
Merci encore pour le coup de main et je regarderais le XML (j'en ai utilisé pour le rss mais je ne l'ai pas encore abordé pour AJAX ^^ )

Reply

Sujets relatifs:

Leave a Replay

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