jquery - 通过 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> </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;
}
?>
解决方案
有些字符具有特殊的含义。一些这样的字符是 +、% 和 & 等。'+' 字符在服务器端被解释为空格。在表单字段中使用时,它会被空格替换。发送 ajax 请求时,您可以在浏览器控制台中轻松看到 '+' 替换为空格。
类似地,'&' 字符被视为参数之间的分隔符。因此,如果您在文本框中键入“sachin&1”,则发送到服务器的值将是“sachin”,因为服务器将假定它已收到两个参数,“uname”和“1”,“uname”的值为“sachin”和“1”的值为空。
解决方案
为了向服务器发送诸如 +、% 和 & 等特殊符号,需要对它们进行编码。Javascript 提供了一种方法,该方法encodeURIComponent()
对传递给它的字符串中存在的所有特殊字符进行编码。所以在上面的ajax请求中,如果“uname”参数被发送为
data: "uname=" + encodeURIComponent($("#userName").val())
那么如果用户输入“sachin+1”,那么在服务器端接收到的值将是相同的,即“+”不会被删除。