Все после "&" теряется при отправке через jQuery AJAX - PullRequest
0 голосов
/ 11 апреля 2020

Все, что я печатаю после "&" в текстовом поле ввода, теряется при отправке через jQuery AJAX.

Например, если я наберу

Line 1    
Line 2

Тогда с контентом проблем не возникает.

Получает контент со страницы и через AJAX как

<p>Line 1</p>
<p>Line 2</p>

Но если я ввожу контент как (посмотрите на пустую строку между строкой 1 и строка 2):

Line 1

Line 2

Затем на странице я получаю следующее содержимое в окне предупреждения

<p>Line 1</p>
<p>&nbsp;</p>
<p>Line 2</p>

Но сервер получает следующее содержимое

<p>Line 1</p>
<p

Очевидно, что оставшееся содержимое после <p>Line 1</p> было усечено.

Как решить эту проблему?

РЕДАКТИРОВАТЬ

Код, который отправляет данные на сервер:

<script type="text/javascript">
$(document).ready(function(){
    $("#btnsave").click(function(){
        var textarea_val = $("#mytextarea").val();
        //alert(textarea_val);

        $.ajax({
            url: "ajax/save-content.php",
            data: "comment="+textarea_val,
            type: "POST",
            success: function(data){
                //alert(data);
            }
        });
    });
});
</script>

PHP код, который получает данные:

<?php
if(isset($_GET['btnsave']))
{
    $comment = $_GET['mytextarea'];

    echo $comment;
}
?>

1 Ответ

2 голосов
/ 13 апреля 2020

Есть несколько символов, которые имеют особое значение. Некоторые из таких символов +,%, & et c. Символ «+» интерпретируется как пробел на стороне сервера. При использовании в полях формы он заменяется пробелами. При отправке запроса ajax вы легко можете увидеть, что «+» заменяется пробелом в консоли браузера.

Аналогичным образом символ «&» обрабатывается как разделитель между параметрами. Таким образом, если вы введете «sachin & 1» в текстовое поле, то значение, отправленное на сервер, будет «sachin», так как сервер будет считать, что он получил два параметра, «uname» и «1» со значением «uname», как «sachin» и значение «1» как ноль.

Решение

Для отправки специальных символов, таких как +,%, & et c., на сервер, они должны быть закодированы. Javascript предоставляет метод encodeURIComponent(), который кодирует все специальные символы, присутствующие в передаваемой ему строке. Таким образом, в приведенном выше запросе ajax, если параметр «uname» отправляется как

data: "uname=" + encodeURIComponent($("#userName").val())

, то, если пользователь введет «sachin + 1», значение, полученное на сервере, будет таким же, то есть «+» не будет удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...