如何通过AJAX将Contenteditable Div内容数组传入PHP并存入数据库?
解决AJAX传递数组到PHP为空的问题
看起来你遇到的核心问题是AJAX发送的数组没有被PHP正确接收,我来一步步帮你排查和修复:
问题原因分析
你之前的AJAX请求用默认格式传递数组时,jQuery会把{ arraykey: OBJ }编码成arraykey[]=值1&arraykey[]=值2的格式,但如果PHP的配置限制(比如max_input_vars)或者请求解析的问题,可能导致$_POST无法正确获取到数组。另外,你之前的JS代码还存在一个小问题:每次点击按钮时没有清空OBJ数组,多次点击会导致内容重复累积。
解决方案:改用JSON格式传递数据
用JSON格式传递数组更可靠,也更适合复杂数据结构,下面是修正后的代码:
1. 修正JavaScript代码
document.getElementById("done_editing").addEventListener("click", get_values); var OBJ = []; function get_values() { // 每次点击先清空数组,避免重复添加 OBJ = []; const divobj = document.querySelectorAll('[contenteditable=true]'); for (let i = 0; i < divobj.length; i++) { // 去掉内容首尾的空白字符,避免空字符串被加入 const content = divobj[i].textContent.trim(); if (content) { OBJ.push(content); } } console.log('要提交的内容:', OBJ); $.ajax({ type: "POST", url: "test.php", // 明确告诉服务器我们发送的是JSON格式 contentType: "application/json", // 把数组转成JSON字符串 data: JSON.stringify({ arraykey: OBJ }), success: function (response) { alert('提交成功!服务器返回:' + response); }, error: function (jqXHR, textStatus, errorThrown) { console.error('请求出错:', textStatus, errorThrown); } }); }
2. 修正PHP代码
因为现在接收的是JSON请求体,不能直接用$_POST,需要读取php://input来获取数据:
// 先建立数据库连接(替换成你的数据库信息) $link = mysqli_connect("localhost", "你的用户名", "你的密码", "你的数据库名"); // 检查连接是否成功 if($link === false){ die("ERROR: 连接失败 " . mysqli_connect_error()); } // 读取JSON格式的请求体 $jsonData = file_get_contents('php://input'); // 把JSON转成PHP关联数组 $requestData = json_decode($jsonData, true); // 验证是否收到有效的数组 if (!empty($requestData['arraykey']) && is_array($requestData['arraykey'])) { $array = $requestData['arraykey']; echo "成功收到数组:<br>"; print_r($array); // 这里添加插入数据库的逻辑(示例) foreach ($array as $item) { // 必须转义内容防止SQL注入! $safeItem = mysqli_real_escape_string($link, $item); $sql = "INSERT INTO 你的表名 (你的字段名) VALUES ('$safeItem')"; if(mysqli_query($link, $sql)){ echo "<br>数据「$safeItem」插入成功"; } else { echo "<br>数据「$safeItem」插入失败:" . mysqli_error($link); } } } else { echo "未收到有效的数组数据"; } // 关闭数据库连接 mysqli_close($link); ?>
额外注意事项
- 确保你已经正确引入了jQuery库,否则
$会报错 - 数据库操作一定要做SQL注入防护,上面用了
mysqli_real_escape_string,更推荐使用预处理语句(更安全) - 可以查看PHP的错误日志(一般在服务器的
error_log文件),排查是否有隐藏的配置或权限问题 - 如果坚持要用
application/x-www-form-urlencoded格式,需要在AJAX里设置traditional: true,这样jQuery会把数组编码成arraykey=值1&arraykey=值2,PHP就能通过$_POST['arraykey']获取到数组了,但JSON格式还是更推荐
内容的提问来源于stack exchange,提问作者Quint
相关产品推荐
相关产品推荐

