IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

JSON doit renvoyer un formulaire HTML mais plante...


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 51
    Points : 38
    Points
    38
    Par défaut JSON doit renvoyer un formulaire HTML mais plante...
    Bonjour à tous...

    Alors j'ai une solution simple qui est de laisser tomber ce que je souhaite faire en AJAX et de recharger ma page... mais je suis tétu... donc j'aimerai avoir un coup de main pour mon problème qui est le suivant :

    J'ai maPage.php qui est chargée par le navigateur...
    Celle-ci contient 2 div...

    Dans un premier div (DIV1), on a une liste déroulante permettant de choisir une option et un bouton pour valider.

    Dans le second div (DIV2), on a par défaut au départ un div vide...

    Ce que je cherche à faire est la chose suivante (vous vous en serez doutés) :
    Au moment de la validation par le bouton dans le premier div... j'appelle en AJAX une page load.php qui prend en paramètre la valeur de l'option choisie dans la liste déroulante... On appelle donc : load.php?option=12

    Cette page qui s'exécute coté serveur enregistre le choix de l'utilisateur dans la base et je souhaite qu'elle me retourne 2 informations... à savoir les nouveaux contenus de mes 2 div...
    Ainsi aprés la validation, je souhaiterai (sans recharger la page) que mon DIV2 contienne la liste des options choisies (en l'occurence ici uniquement la 12 que l'on vient d'enregistrer) et que du coup mon DIV1 contienne la nouvelle liste d'option disponible (à savoir la même que précédemment mais avec l'option 12 en moins)...

    Je tiens à préciser que je n'ai aucun problème pour tous les traitements coté serveur (enregistrement BD, génération de la nouvelle liste etc... tout ca c'est bon)

    La solution que j'ai choisi est de générer un message en JSON et de le parser... Pourquoi... parce que dans le 1er div on a un formulaire avec une liste déroulante et dans le 2nd une liste d'enregistrement.

    Le faire avec responseXML, ca me pose problème car le message retourné contient des balises html et au moment du parsing c'est la merde... Et puis c'est mal géré sous IE...
    Faire cela avec une responseText brute aurait été crade... Donc je me suis retourné vers JSON... J'ai donc repris les codes courrants à savoir qu'au retour de ma variable responseText je vérifie sa validité comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reponse = validateJSON(xhr.responseText);
    Et ce à l'aide de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function validateJSON(jsonText) {
    	return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(jsonText.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + jsonText + ')');
    }
    (Que par la même occasion je ne comprends pas du tout )

    Le problème est que la chaîne retournée n'est jamais valide...

    J'ai donc pensé que cela provennait du fait que la chaîne générée contient des doubles côtes... (<form id="xxxx"> et idem pour chaque option de ma liste déroulante)... Avant de la renvoyé je lui applique donc la fonction addslashes mais cela ne suffit pas...

    Je bloque... avec au sortir de l'exécution la chaîne JSON non valide suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [
        { "newDiv1" : "	<form id=\"form1\" name=\"form1\">
    		<select id=\"maListe\" name=\"maListe\">
    			<option value=\"12\">Artichaut</option>
    			<option value=\"8\">Banane</option>
    			<option value=\"4\">Carotte</option>
    		</select>
    		le
    		<input type=\"text\" name=\"date_achat\" id=\"date_achat\" size=\"12\" value=\"\"
    				onClick=\"view_microcal(true,dateDebut,microcalDebut,-1,0);\" 					               
    				onKeyUp=\"this.style.color=testTypeDate(this.value)?\'black\':\'red\'\">
     
    				<div id=\"microcalDebut\" style=\"visibility:hidden;position:absolute;border:2px #900031 solid;background:#ffffff;\" onMouseleave=\"view_microcal(false,dateDebut,microcalDebut,-1,0);\"></div>
    		<input type=\"button\" id=\"btn_record\" name=\"btn_record\" value=\"Enregistrer\" onClick=\"load();\"><br>
    	</form>
    ", "newDiv2" : "Aucun produit.<br>" }
    ]
    basé sur le modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $str = <<<STR
    [
        { "newDiv1" : "$div1", "newDiv2" : "$div2" }
    ]
    STR;
    Et ca... ca marche pas !
    (L'appel view_microcal sur mon champ date me permet simplement d'avoir un ptit calendrier pour sélectionner la date)

    Donc si vous voyez quelque chose qui pourrait m'aider...

    Si personne n'arrive à me sortir de là... je crois que je vais opter pour la responseText avec mes propres balises [DIV] et [/DIV] me permettant de repérer chacun de mes div et de les récupérer avec un ptit parser tout bête...

    Merci d'avance pour vos lumières

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Ceci dit... Si vous avez une solution autre je suis preneur également

    Pour l'instant je m'en sors avec la solution citée à savoir que je récupère une responseText et qu'entre les 2 strings qui représentent mes 2 div j'ai mis une balise du style [__DIV__].

    Comme ca au retour de la responseText je coupe la chaine en 2 en recherchant cette balise et je peux ainsi mettre à jour mes 2 div...

    A suivre...

Discussions similaires

  1. Comment afficher le contenu d'un fichier JSON dans un formulaire HTML
    Par attiegoua1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/07/2012, 18h17
  2. Noob de l'HTML doit faire un formulaire
    Par Davboc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 16/12/2005, 00h14
  3. [POO] Formulaire HTML + fonction JS = Erreur
    Par bdaboah dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/11/2004, 21h59
  4. Réponses: 11
    Dernier message: 17/03/2003, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo