Ajax, xhr.send() et caracteres speciaux.

Résolu
Drclown Messages postés 16 Statut Membre -  
AssassinTourist Messages postés 409 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, j'ai un problème lorsque je veux envoyer une saisie en AJAX avec send(). Pour info j'envoie les données par POST comme ceci:
xhr.send("donnees="+donnees);

Le problème est que lorsque je tape un & dans la saisie et que j'exécute, send() est bloqué par ce & qui l'interprète comme ça:
xhr.send("donnees=&");

Comment je peux faire pour que les & soit envoyer dans ma page ajax.php ?

4 réponses

  1. AssassinTourist Messages postés 409 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Bonjour,
    Les backslasher peut-être.
    1
    1. Drclown Messages postés 16 Statut Membre
       
      Comment ça? avec des antislashs?
      0
    2. AssassinTourist Messages postés 409 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      Oui. Faire une sorte de regex pour rajouter des antislashs devant des caractères spéciaux.
      0
  2. Drclown Messages postés 16 Statut Membre
     
    Merci Assassintourist en mettant un antislash le & est interprété comme une chaine!
    Le code
    xhr.send("donnees=/&");
    me renvoi:
    &
    J'ai plus qu'a faire une regex et c'est bon =D
    0
  3. Drclown Messages postés 16 Statut Membre
     
    Désolé mais faite ça ne marche pas je mettais tromper l'antislash avant le & bloque toujours la méthode send()...
    D'autre idées peu être?
    0
    1. AssassinTourist Messages postés 409 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      Un antislash, c'est \ et non /
      Mais je vois ce que tu veux dire, oui... mmh...
      0
    2. Drclown Messages postés 16 Statut Membre
       
      oui erreur de ma part j'ai bien essayé avec un \.
      Pour info, ça bloque quand j'envoie le caractère +:
      xhr.send("donnees=+");

      Mais pas le caractère -:
      xhr.send("donnees=-");

      Il y a peu être une autre méthode que send()?
      0
    3. AssassinTourist Messages postés 409 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      Parce que + est utilisé dans javascript pour concaténer des variables et - bah ce n'est qu'un tiret ou un moins.
      0
  4. Drclown Messages postés 16 Statut Membre
     
    J'ai trouvé la solution '&' est un séparateur dit réservé pour les URL etc... Pour permettre à send() de l'envoyer il faut utiliser la fonction encodeURIComponent() sur la chaine:
    donnees = encodeURIComponent(donnees);
    xhr.open('POST', 'ajax.php');
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  
    xhr.send("donnees="+donnees);
    

    et la ça marche Youpi!!
    0
    1. AssassinTourist Messages postés 409 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      Ok tant mieux =)
      0