【发布时间】:2014-12-29 13:05:31
【问题描述】:
我正在构建一个测验,我现在正在做的是处理用户的输入并使用我的数据库中的答案表检查用户的提交并将分数返回给用户。
我的测验采用多项选择的形式供用户选择,每个选项都有自己的价值。我为捕获数据所做的是将表单数据序列化并将所有表单数据存储在一个对象中。该对象看起来像这样:
{ 问题1:'1',问题2:'2',问题3:'3',问题4:'4',问题5:'5'}
因此,它将问题和用户答案存储为键值对,问题编号在前,用户选择的选项在后。正如您从下面的代码中看到的那样,我正在使用 .each 取出键值对,而我想做的是每次 .each 运行时,将 ajax 命令运行到外部 checkanswer.php 脚本以进行验证用户选择的选项。每次服务器返回匹配项时,php 都会向 ajax 返回一个文本字符串“正确”,然后将 1 增加到创建的计数变量。我还在下面附加了 php 脚本。在@barmar 的建议下,我已经完全删除了 json,但是 .each 下的 count 变量仍然没有根据从 ajax 调用返回的正确答案的数量给出正确的数字。 ++ 在阅读了有关 ajax 工作方式的更多信息后,似乎 ajax 不等待提交处理程序,因此我必须更改代码。一种方法是实际发送整个字符串并让 php 循环遍历键值对并在那里进行计数并将值返回给 ajax。大家觉得呢?
<script>
$('#quizform').submit(function() {
var data = $(this).serializeArray();
count = 0;
$.each(data, function(i, el) {
//display the key and value pair
var k = el.name;
var v = el.value;
var request = $.ajax({
url: "checkanswer.php",
type: "POST",
data:{ k:k, v:v},
dataType:"text",
success: function(data) {
if (data=="correct") {
count++;
}
},
error: function(request, err){
alert(err);
}
});
});
alert(count);
return false;
});
</script>
PHP 脚本:
<?php
session_start();
include_once("config.php");
if (isset($_POST['k']) && isset($_POST['v'])){
$questionid=$_POST['k'];
$option=$_POST['v'];
$result=mysqli_query($mysqli, "SELECT COUNT(*) FROM answer WHERE question_id = ".$questionid." AND optionid = ".$option."");
if($result==0) {
echo"wrong";
}else if ($result == 1) {
echo"correct";
}
}
?>
我已经编辑了上面的代码
【问题讨论】:
-
您需要设置您的 HTTP“Content-Type”标头。我建议使用 Chrome 调试器并转到网络面板并使用“保留日志”复选框来查看服务器返回的内容。需要是 JSON 响应。
-
是的,我认为它与标题有关,目前每当我提交表单时,它都会将我重定向到我页面中找到的另一个 php 标题,这对我来说很奇怪
-
查看 config.php 文件中的内容,可能包含标题并导致问题
标签: javascript php jquery ajax json