You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:56:59