有时需要两次提交(AJAX调用)来保存数据

时间:2013-01-29 20:50:10

标签: php ajax

我目前正在为我的网站构建一个多项选择测验模块。有一个包含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小时,所以我很好奇听到我做错了什么。

提前致谢!!

1 个答案:

答案 0 :(得分:0)

这个问题很可能与HTTP / AJAX的异步性质有关:只是因为请求已经“放在网上”意味着它实际上已经被服务器处理了 - 更不用说了保存到数据库中!

快速检查,将callquiz()$.submit回调移至“answerpost.php”$.ajax回调的成功回调。 (也就是说,只有在完成提交问题答案的请求后才能请求的新信息。)

这将确保在下一个“获取测验”(answerpost.php)请求之前发生(并完成)“更新”(quiz_ajax.php)操作。如果情况确实如此,请考虑让“更新”还返回“获取测验”信息以进行单一统一呼叫。