Подтвердить что ты не робот

Символ амперсанда (&) внутри значения параметра запроса jQuery AJAX

Я выполняю асинхронные запросы HTTP (Ajax) через jQuery с базовым $.ajax(). Код выглядит следующим образом:

$("textarea").blur(function(){
   var thisId = $(this).attr("id");
   var thisValue = $(this).val();

   $.ajax({
      type: "POST",
      url: "some.php",
      data: "id=" + thisId + "&value=" + thisValue,
      success: function(){
        alert( "Saved successfully!" );
      }
   });

});

Все работает нормально, как обычно, пока пользователь не наберет внутри textarea ampersand (&) символ.. Когда я отлаживаю функцию PHP, которая сохраняет значение, она всегда имеет значение до этого символа.

Я считаю, что должно быть решение пропустить амперсанд (&) каким-то образом. Любые идеи?

4b9b3361

Ответ 1

Вместо:

data: "id=" + thisId + "&value=" + thisValue

do:

data: { id: thisId, value: thisValue }

Таким образом, jquery позаботится о правильном URL-кодировании значений. Строковые конкатенации являются корнем всего зла: -)

Ответ 2

Настоятельно рекомендуем вам использовать решение, предоставленное Darin выше, если это вообще возможно; Таким образом, вы можете повторно использовать проверенный код для создания данных POST.

Но если вам действительно действительно нужно использовать конкатенацию строк (здесь или в другом месте вашего приложения при создании строк запроса или данных POST из пользовательских входов), вам нужно использовать encodeURIComponent:

$("textarea").blur(function(){
   var thisId = $(this).attr("id");
   var thisValue = $(this).val();

   $.ajax({
      type: "POST",
      url: "some.php",
      data: "id=" + encodeURIComponent(thisId) + "&value=" + encodeURIComponent(thisValue),
      success: function(){
        alert( "Saved successfully!" );
      }
   });
});

По умолчанию при отправке POST с jQuery.ajax вы отправляете данные с типом контента application/x-www-form-urlencoded, который означает, что вы обещаете, что данные закодированы таким образом. Вы должны быть уверены, что сохраните свою часть сделки и фактически закодируйте ее. Это не просто важно для амперсандов.

Ответ 3

просто используйте функцию javascript encodeURIComponent():

$("textarea").blur(function(){
   var thisId = $(this).attr("id");
   var thisValue = $(this).val();

   $.ajax({
      type: "POST",
      url: "some.php",
      data: "id=" + thisId + "&value=" + encodeURIComponent(thisValue),
      success: function(){
        alert( "Saved successfully!" );
      }
   });

});

Ответ 4

$.ajax({

   type:'POST',
 dataType: "text",
   url:'save.php',
   data:'_id='+$('#id').val()+'&title='+$('#title').val(),
??
data: { id: thisId, value: thisValue }