使用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
相关产品推荐
相关产品推荐

