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 :

[AJAX] UTF-8 et entier


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [AJAX] UTF-8 et entier
    Bonjour,

    Je vous expose mon problème.
    Suite a des soucis de caractères spéciaux avec l'AJAX, je tente de faire passer mon site en UTF-8.

    Seulement voila, en modifiant ma page php qui s'occupait des fonctions d'AJAX, une de mes fonction c'est mise a ne plus fonctionner totalement.

    La fonction en question, dans le cadre d'une création de "dialogue", doit permettre de créer un choix réponse, puis d'enchainer avec la réponse automatique.

    Code action.php : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="../images/ajouter_rep.gif" onclick="ajouter_reponse(\''. $precedent .'\')" />

    Code admin_dialogue.js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function ajouter_reponse(precedent) {
      texte_rep=prompt('Vous pouvez écrire le contenu de votre réponse ici.','');
      if (texte_rep != null) {
        id_rep = file('ajax.php?fonction=ajouter_dialogue&id_pnj='+var_id_pnj+'&texte='+texte_rep+'&precedent='+precedent+'&type_dial=1');
        texte_suite = prompt('Vous pouvez écrire le contenu qui suit à cette réponse (la réponse du pnj donc). Si vous annulez, un contenu vide sera tout de même créer','')
    	file('ajax.php?fonction=ajouter_dialogue&id_pnj='+var_id_pnj+'&texte='+texte_suite+'&precedent='+id_rep+'&type_dial=0');
    	document.getElementById('affichage_dial_global').innerHTML = file('ajax.php?fonction=afficher_dialogue_global&id_pnj='+var_id_pnj);
      }
    }

    Code ajax.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case 'ajouter_dialogue':
    $action->ajouter_dialogue($_GET['id_pnj'],$_GET['texte'],$_GET['precedent'],$_GET['type_dial']);
    break;

    Code action.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      function ajouter_dialogue($id_pnj,$texte,$precedent,$type_dial) {
        if ($texte == null OR $texte == 'null') $texte = 'En construction.';
     
        $req = $this->interfaceSQL->insert('dialogue_pnj','"",'. $id_pnj .',\''. $texte .'\','. $precedent .','. $type_dial .',NULL');
    	$identifiant = $this->interfaceSQL->recup_id();
    	echo $identifiant;
      }

    Le dysfonctionnement est survenu quand j'ai passé la page où se trouve ma fonction php. Depuis la 2ème insertion de ne veut plus passer. id_rep récupère bien le bon identifiant, javascript le considère comme un entier, mais quand php le reçoit il ne le considère pas comme tel et ne veut donc pas l'insérer (le champs devant le recevoir étant en int). J'ai essayé de le changer en entier avec une fonction php mais sa le change systématiquement en 0.


    J'ai passé des heures à essayer de régler ce problème, et je ne m'en sort pas.

  2. #2
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par jocelyn.a Voir le message
    Le dysfonctionnement est survenu quand j'ai passé la page où se trouve ma fonction php. Depuis la 2ème insertion de ne veut plus passer. id_rep récupère bien le bon identifiant, javascript le considère comme un entier, mais quand php le reçoit il ne le considère pas comme tel et ne veut donc pas l'insérer (le champs devant le recevoir étant en int). J'ai essayé de le changer en entier avec une fonction php mais sa le change systématiquement en 0.
    As-tu essayé utf8_decode. Que contient la chaine de caractères reçue par PHP?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Sa ne marche pas mieux. Mais merci pour la réponse en tout cas ^^.

    Je vais tenter de préciser le problème.

    Pour commencer sa concerne essentiellement la donnée $precedent.

    Ma fonction qui s'effectue sur un onclick récupère l'identifiant du dialogue sur lequel il va falloir ajouter une réponse. Il utilise alors la fonction AJAX ajouter_dialogue($id_pnj,$texte,$precedent,$type_dial), en passant tout les paramètres nécessaires. Ici précédent est donc directement récupéré dans les paramètres du onclick (function ajouter_reponse(precedent)).

    Là la fonction php marche totalement et renseigne le bon précédent. Elle renvoi au passage l'identifiant qui vient d'être insérer à javascript.

    Javascript refait appel à PHP et utilise la même fonction, en renvoyant cette fois pour $precedent l'identifiant qui vient d'être récupérer.

    Cette fois php me renvois une erreur, il ne considère pas $precedent comme un entier et refuse donc de l'insérer dans le champs approprié en base de donnée.


    Les divers tests que j'ai effectué m'ont permis de voir que :

    - php récupère le bon identifiant, lorsque je fait un echo et que je l'affiche ensuite, c'est le bon numéro qui apparait.
    - quand je tente de convertir $precedent en entier via une fonction php, $precedent devient 0.
    - idem en essayant avec $identifiant (donc avant de renvoyer le résultat de la première utilisation de la fonction).
    - javascript détecte id_rep (l'identifiant en question) comme un entier.
    - si je tente malgrès tout de convertir id_rep en entier via une fonction javascript, je reçoit une erreur (NaN).
    - j'ai également essayé (en désespoir de cause :p), d'afficher l'identifiant en question dans ma page puis de le récupérer avec javascript (via un document.getElementById...) , ça n'a pas mieux marcher.

  4. #4
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par jocelyn.a Voir le message
    Là la fonction php marche totalement et renseigne le bon précédent. Elle renvoi au passage l'identifiant qui vient d'être insérer à javascript.
    Comment se fait ce renvoi?

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Code à la fin de ajouter_dialogue : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $identifiant = $this->interfaceSQL->recup_id();
    echo $identifiant;
    Sachant que $this->interfaceSQL->recup_id(); correspond à la fonction php mysql_insert_id(); qui permet de récupérer l'identifiant auto-incrémenté lors d'une insertion.

    L'echo est récupéré simplement par javascript dans la variable id_rep :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_rep = file('ajax.php?fonction=ajouter_dialogue&id_pnj='+var_id_pnj+'&texte='+texte_rep+'&precedent='+precedent+'&type_dial=1');

  6. #6
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par jocelyn.a Voir le message
    L'echo est récupéré simplement par javascript dans la variable id_rep :
    Que donne un alert de id_rep? Ta réponse n'a pas franchement l'air de UTF-8, il manquerait aps des headers des fois? (du type text\plain et un charset).

    cf :
    http://fr.php.net/header

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Un alert de id_rep m'affiche la bonne valeur, sans problème.

    J'ai bien mis le header dans mon fichier principal, je ne peut pas le mettre dans la page php appelé par ajax (sinon il me le renvoit texto :s). J'ai à un moment essayé d'ajouter la fonction header(...charset=UTF-8,... je me souvient plus bien de la syntaxe. Sa m'a provoqué un conflit comme quoi le header était déjà déclaré.

    Et hormis ce point noire. Tout fonctionne.

Discussions similaires

  1. [OS X] [Bash 3] [iconv] Script pour convertir projet entier en UTF-8
    Par aidonia dans le forum Shell et commandes POSIX
    Réponses: 10
    Dernier message: 13/05/2013, 15h31
  2. [AJAX] AJAX et UTF-8
    Par sosophie dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 26/01/2008, 09h50
  3. [AJAX] Supprimer la ligne en entier
    Par biker63 dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 07/05/2007, 19h07
  4. [AJAX] [xhr.send()] Paramètres toujours envoyés en UTF-8
    Par webrider dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/03/2007, 15h05
  5. Réponses: 1
    Dernier message: 05/12/2006, 16h54

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