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

使用PHP结合AJAX无法获取测验结果的技术问题求助

解决AJAX无刷新获取测验结果的ReferenceError问题

看起来你卡在了变量未定义的坎儿上,这个Uncaught ReferenceError: $choice is not defined错误指向很明确——你在代码里用了$choice这个变量,但它根本没被声明或者初始化。咱们一步步把问题拆解开,顺便把无刷新提交的逻辑捋顺。

第一步:修复变量未定义的核心错误

你提到的$choice大概率是想用jQuery获取用户选中的选项,但肯定是写法出了问题。比如你可能漏了选择器的引号和符号,正确的姿势应该是先获取选中的DOM元素:

// 假设你的选项是name为answer的单选框,先正确定义$choice
var $choice = $('input[name="answer"]:checked');

要确保在调用AJAX之前就定义这个变量,而且要放在点击事件的处理函数内部,这样每次点击提交按钮时,都会重新获取最新的选中状态。

第二步:完整的无刷新AJAX实现方案

结合你的测验系统场景,我给你整理一套完整的示例代码,覆盖阻止表单刷新、获取选项、发送请求、更新结果的全流程:

1. 假设你的HTML结构大概是这样:

<form id="quiz-form">
  <!-- 当前题目区域 -->
  <div class="current-question" data-question-id="1">
    <h3>题目1:以下哪个是jQuery的核心函数?</h3>
    <input type="radio" name="answer" value="A"> getElementById()<br>
    <input type="radio" name="answer" value="B"> $()<br>
    <input type="radio" name="answer" value="C"> querySelector()<br>
  </div>
  <!-- 结果展示区域 -->
  <div id="result-display"></div>
  <!-- 提交按钮 -->
  <button type="submit" class="submit-btn">提交答案</button>
</form>

2. jQuery AJAX代码:

$(document).ready(function() {
  $('#quiz-form').on('submit', function(e) {
    // 先阻止表单默认的刷新提交行为,这是无刷新的前提
    e.preventDefault();
    
    // 重新定义$choice,确保它能拿到选中的选项
    var $choice = $('input[name="answer"]:checked');
    
    // 先判断用户有没有选中选项,避免空提交
    if (!$choice.length) {
      $('#result-display').html('<p>请先选择一个选项哦!</p>');
      return;
    }
    
    // 准备传给后端的数据:当前题目ID+选中的答案
    var submitData = {
      question_id: $('.current-question').data('question-id'), // 动态获取当前题ID
      selected_answer: $choice.val()
    };
    
    // 发送AJAX请求
    $.ajax({
      url: '/your-backend-api', // 替换成你的后端接口地址
      type: 'POST',
      data: submitData,
      success: function(response) {
        // 后端返回结果后,无刷新更新页面上的结果区域
        $('#result-display').html('<p>' + response.result + '</p>');
        // 如果需要自动切换到下一题,这里可以调用你的题目切换函数
        // switchToNextQuestion();
      },
      error: function(xhr, status, error) {
        // 处理请求失败的情况
        $('#result-display').html('<p>获取结果失败,请重试!</p>');
        console.error('AJAX请求出错:', error);
      }
    });
  });
});

第三步:额外注意事项

  • 确保jQuery已经正确引入,而且要在你的自定义JS代码之前加载(错误里提到了jquery.min.js,应该是已经引入了,但要确认加载顺序)
  • 后端接口要能正确接收question_id和selected_answer参数,返回JSON格式的结果(比如{ "result": "回答正确!加10分" })
  • 如果是多题目切换,要记得动态更新.current-question的data-question-id属性,保证提交的是当前题目的ID

这样改完之后,不仅能解决那个ReferenceError,还能实现真正的无刷新提交获取结果啦!

内容的提问来源于stack exchange,提问作者Piotr Mirosz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:54:55