文本框含&amp时jQuery提交空值至数据库的问题
问题原因及解决方案
问题根源
- 数据未编码导致参数截断:手动拼接POST数据字符串时,未对
&这类特殊字符做URL编码,当输入内容包含&amp时,服务器会把&识别为参数分隔符,导致msadhgstsmanu的实际值被截断为空。 - AJAX配置错误:错误设置
processData: false和contentType: false,这两个参数仅适用于上传文件的FormData场景,普通POST请求下会让jQuery无法正确处理数据编码和请求头,服务器无法解析POST参数。
修复步骤
1. 修改index.php的AJAX代码
推荐用对象形式传递数据,jQuery会自动完成URL编码,无需手动拼接字符串:
$(document).ready(function (e) { $(document).on('click', '.msptd_584', function(d){ var maneno = $('#hiitest').val(); $.ajax ({ url: 'test.php', data: { msadhgstsmanu: maneno }, // 对象形式传递,自动编码特殊字符 type: 'POST', success: function(data){ console.log(data); // 可查看服务器返回的接收结果 } }); }); });
如果坚持手动拼接字符串,必须对内容做URL编码:
var maneno = $('#hiitest').val(); var posted = 'msadhgstsmanu='+ encodeURIComponent(maneno); // 编码特殊字符避免参数截断 $.ajax ({ url: 'test.php', data: posted, type: 'POST', // 移除processData和contentType的错误配置 success: function(data){ console.log(data); } });
2. 验证test.php的接收逻辑
在test.php中添加输出代码,确认数据是否正确接收:
<?php // ... 数据库连接代码 ... $bodyfirst = (array_key_exists('msadhgstsmanu', $_POST) ? $_POST['msadhgstsmanu'] : ""); echo $bodyfirst; // 添加此行,在AJAX的success回调中查看返回值 $email2 = 'my name'; $stmt = $dbcon->prepare("INSERT INTO test (jina,mwisho)VALUES(:nani2e,:comm_body21)"); $stmt->execute(['nani2e'=>$bodyfirst,'comm_body21'=>$email2]);
修改后,包含&amp的内容就能正常提交到服务器并插入数据库。
内容的提问来源于stack exchange,提问作者Joman Manu
相关产品推荐
相关产品推荐

