jQuery AJAX无法向quiz.php发送POST数据的问题排查
解决AJAX提交多box ID及POST数据接收问题
看起来你现在卡在上两个关键点:AJAX只发了第一个box的ID,以及PHP端拿不到POST数据。我来一步步帮你理顺:
1. 让AJAX发送所有box的ID
你当前的AJAX data 参数只传了 box: box1,自然只会发送第一个box的ID。要把四个box的ID都传过去,有两种实用方式:
方式一:用数组批量传递
修改JavaScript代码,把四个box的ID打包成数组,PHP端可以直接通过$_POST['boxes']拿到完整的数组:
$(document).ready(function() { $("form").submit(function(e) { // 必须阻止表单默认提交行为,否则页面会直接刷新,AJAX请求会被中断 e.preventDefault(); var box1 = $("#box1 :first-child").attr('id'); var box2 = $("#box2 :first-child").attr('id'); var box3 = $("#box3 :first-child").attr('id'); var box4 = $("#box4 :first-child").attr('id'); alert(box1 + " " + box2 + " " + box3 + " " + box4); $.ajax({ type: 'POST', url: 'quiz.php', // 传递所有box ID,同时别忘了把表单里的隐藏域数据也带上 data: { boxes: [box1, box2, box3, box4], questionId: $("#questionId").val(), questionType: $("#questionType").val() }, // 可选:添加成功回调,方便调试和后续页面更新 success: function(response) { console.log("数据提交成功,返回内容:", response); // 这里可以写加载新题目的逻辑,比如局部刷新页面区域,不用整页重载 // 示例:$('#fotoblok').load('quiz.php #fotoblok'); // 如果还是需要整页刷新,就用 location.reload(); }, error: function(xhr) { console.error("提交失败:", xhr.responseText); } }); }); });
方式二:单独传递每个box的ID
如果你需要在PHP里单独获取每个box的ID,也可以这样写:
data: { box1: box1, box2: box2, box3: box3, box4: box4, questionId: $("#questionId").val(), questionType: $("#questionType").val() }
2. 修复PHP端接收不到数据的问题
首先要注意:你的AJAX请求是发送到quiz.php,但你在logtime.php里用var_dump测试,这肯定拿不到数据!你需要把接收逻辑放到quiz.php里:
比如在quiz.php开头添加:
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 如果是数组方式传递的boxes if (isset($_POST['boxes'])) { var_dump($_POST['boxes']); } // 如果是单独传递的box1-box4 if (isset($_POST['box1'], $_POST['box2'], $_POST['box3'], $_POST['box4'])) { var_dump($_POST['box1'], $_POST['box2'], $_POST['box3'], $_POST['box4']); } // 打印所有POST数据,方便确认是否收到 var_dump($_POST); // 处理完数据后,可以返回状态给AJAX echo json_encode(['status' => 'success']); exit; // 避免输出页面其他无关内容 } // 原有页面的逻辑代码... ?>
另外,你原来的提交按钮绑定了onclick="myFunction()",如果这个函数没有特殊作用,建议移除,避免和jQuery的submit事件冲突。
额外提醒
- 要确保每个box里确实有子元素,不然
$("#box1 :first-child").attr('id')会返回undefined,可以加个兜底判断:var box1 = $("#box1 :first-child").attr('id') || ''; - 如果不想整页刷新就能加载新题目,推荐在
success回调里用$.load()局部刷新页面的题目区域,体验会更好。
内容的提问来源于stack exchange,提问作者ThomasFromTheNetherlands
相关产品推荐
相关产品推荐

