Не можете отправить '+' через AJAX? - PullRequest
1 голос
/ 01 июня 2010

Я использую метод Ajax POST для отправки данных, но я не могу отправить '+' (оператор на сервер, т. Е. Если я хочу отправить 1+ или 20k +, он отправит только 1 или 20k .. просто стереть '+') HTML код здесь ...

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

и код JavaScript здесь,

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;
           }

в функции submitVal () он сначала оповещает о размере заработной платы как есть (если 1+, затем предупреждает 1+), но когда он публикуется, он просто публикует значение без оператора «+», который необходим ... Есть ли какие-либо проблемы со строкой запроса, так как внутренний код PHP работает нормально ...

Ответы [ 2 ]

3 голосов
/ 01 июня 2010

Используйте

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

Символ + интерпретируется как пробел на стороне сервера, поэтому сначала необходимо кодировать строку.

Подробнее здесь:

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

1 голос
/ 01 июня 2010

Вам необходимо кодировать sal в request.send ("sal =" + sal). Вы, вероятно, обнаружите, что если бы sal был равен «foo & bar», вы бы просто получили «foo» на сервере, так как & также должен быть закодирован. Итак:

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

Однако вместо того, чтобы делать все вручную, вам следует подумать об использовании библиотеки, которая сделает это за вас, например, jQuery , тогда ваш пример будет выглядеть примерно так:

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