我目前正在为我的网站构建一个多项选择测验模块。有一个包含20个问题的列表,只有登录的客户才能回答。
我有三张桌子:
表格问题,包含字段questions.id,questions.description
表格选项,包含字段options.id,options.questionid,options.trueorfalse
表格答案,字段为answers.id,answers.customerid,answers.questionid,answers.chosenoption
问题来自随机,rand(),ajax-call,因此只显示客户未回答的问题。一旦回答完所有问题,最终得分就会得到回应。
有人可以帮助我使用正确的sql语句运行php脚本来显示客户未回答的问题吗?
目前似乎有效但我有时必须提交两次相同的答案。实际上第一次被发送,但是ajax电话显示同样的问题。
这是我使用的sql语句......
SELECT * from questions
where not exists (
select answers.questionid from answers
where answers.questionid = questions.id
and answers.customerid = '".$customerid."' )
order by rand()
limit 1"
数据由JQuery帖子发送(效果很好)。 在页面内部quiz_ajax.php
<script type="text/javascript">
$(document).ready(function(){
$("#ajax-post-answer").submit(function(){
var str = $(this).serialize();
$.ajax({
type: "POST",
url: "answerpost.php",
data: str
});
callquiz();
return false;
});
});
</script>
在页面内部quiz.php(主页)
<script type="text/javascript">
function callquiz()
{
var newDate = new Date;
$.ajax({
method: 'POST',
url : 'quiz_ajax.php?' + newDate.getTime(),
dataType : 'text',
success: function (text) {
$('#updateMequiz').html(text); }
});
}
callquiz();
</script>
<div id="updateMequiz"></div>
所以callquiz函数应该用一个新问题刷新这个div。我现在正在调查这个问题24小时,所以我很好奇听到我做错了什么。
提前致谢!!
答案 0 :(得分:0)
这个问题很可能与HTTP / AJAX的异步性质有关:只是因为请求已经“放在网上”不意味着它实际上已经被服务器处理了 - 更不用说了保存到数据库中!
快速检查,将callquiz()
从$.submit
回调移至“answerpost.php”$.ajax
回调的成功回调。 (也就是说,只有在完成提交问题答案的请求后才能请求的新信息。)
这将确保在下一个“获取测验”(answerpost.php
)请求之前发生(并完成)“更新”(quiz_ajax.php
)操作。如果情况确实如此,请考虑让“更新”还返回“获取测验”信息以进行单一统一呼叫。