首页 > 解决方案 > 通过 jQuery AJAX 发送时,“&”之后的所有内容都会丢失

问题描述

当通过 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;
}
?>

标签: jqueryajax

解决方案


有些字符具有特殊的含义。一些这样的字符是 +、% 和 & 等。'+' 字符在服务器端被解释为空格。在表单字段中使用时,它会被空格替换。发送 ajax 请求时,您可以在浏览器控制台中轻松看到 '+' 替换为空格。

类似地,'&' 字符被视为参数之间的分隔符。因此,如果您在文本框中键入“sachin&1”,则发送到服务器的值将是“sachin”,因为服务器将假定它已收到两个参数,“uname”和“1”,“uname”的值为“sachin”和“1”的值为空。

解决方案

为了向服务器发送诸如 +、% 和 & 等特殊符号,需要对它们进行编码。Javascript 提供了一种方法,该方法encodeURIComponent()对传递给它的字符串中存在的所有特殊字符进行编码。所以在上面的ajax请求中,如果“uname”参数被发送为

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

那么如果用户输入“sachin+1”,那么在服务器端接收到的值将是相同的,即“+”不会被删除。


推荐阅读