2010-06-01 4 views
1

J'utilise la méthode Ajax POST pour envoyer des données, mais je ne peux pas envoyer '+' (opérateur vers le serveur, c'est-à-dire si je veux envoyer 1+ ou 20k + j'enverrai seulement 1 ou 20k .. + ') code HTML va ici ..Impossible d'envoyer '+' via le message AJAX?

<form method='post' onsubmit='return false;' action='#'> 
    <input type='input' name='salary' id='salary' /> 
    <input type='submit' onclick='submitVal();' /> 
</form> 

et code javascript va ici,

function submitVal() 
{ 
    var sal=document.getElementById("salary").value; 
    alert(sal); 
    var request=getHttpRequest(); 
    request.open('post','updateSal.php',false); 
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
    request.send("sal="+sal); 

    if(request.readyState == 4) 
    { 
     alert("update"); 
    } 
} 

      function getHttpRequest() 
      { 
       var request=false; 
       if(window.XMLHttpRequest) 
       { 
        request=new XMLHttpRequest(); 
       } 
       else if(window.ActiveXObject) 
       { 
        try 
        { 
         request=new ActiveXObject("Msxml2.XMLHTTP"); 
        } 
        catch(e) 
        { 
         try 
         { 
          request=new ActiveXObject("Microsoft.XMLHTTP"); 
         } 
         catch(e) 
         { 
          request=false; 
         } 
        } 
       } 

       return request; 
      } 

dans la fonction submitVal() d'abord la valeur de salaire d'alerte comme il est (si 1+ alors alertes 1+), mais quand il est posté, il suffit de poster la valeur sans opérateur '+' qui est nécessaire ... est-il un problème avec la chaîne de requête, comme le PH code back-end P fonctionne bien ...

+0

cette question a déjà reçu une réponse http://stackoverflow.com/questions/1373414/ajax-post-and-plus-sign-how-to-encode – Arib

Répondre

3

Utilisez

request.send("sal="+encodeURIComponent(sal)); 

Le + est interprété comme un espace sur le côté serveur afin que vous devez coder la première chaîne.

Plus d'infos ici:

http://xkr.us/articles/javascript/encode-compare/

+0

ouais! ça marche, ça prenait + comme un espace ... merci Tatu Ulmanen –

1

Vous devez encoder sal dans request.send ("sal =" + sal). Vous constaterez probablement que si sal était égal à "foo & bar", vous finiriez avec "foo" sur le serveur car le & doit également être encodé. Alors:

request.send("sal=" + encodeURIComponent(sal)); // updated example 

Cependant, plutôt que de faire tout cela à la main, vous devriez penser à utiliser une bibliothèque pour le faire pour vous, comme jQuery, votre exemple ressemblerait à quelque chose comme ceci:

$.ajax({ 
    url: "updateSal.php", 
    type: "POST", 
    data: { sal : $("salary").val() }, 
    success: function(){ 
     alert("update"); 
    } 
}); 
+1

'encodeURI()' n'encodera pas ~ ~! @ # $ & *() =: /,;? + '', utilise' encoderURIComponent () 'à la place. –

+0

J'ai également essayé encodeURI mais il ne fonctionne pas ... –

+0

Cheers Tatu, mis à jour. – Douglas

Questions connexes