我的 javascript 有问题。我正在尝试为每个从 db 确定的正确选择的答案计算分数。如果答案不正确,则标记为“0”,否则标记取决于数据库中答案的标记。
但我遇到了 javascript 的问题:
首先它说connect.php
,这只是简单地导航到它连接到数据库的页面,但这是正确的还是我想链接到它将运行查询以查找答案标记的页面?
其次,它说我response
的代码中未定义,我不应该调用它。
我的问题是我能否澄清上述 2。我正在尝试使用 ajax 和 javascript,如果一个强大的程序员可以解决我遇到的这个问题并能够正确设置代码以便它能够计数每个正确答案标记。
我有一个我正在尝试遵循的 jsfiddle,但是如果有人可以编辑 fiddle 以获得一个用于计数标记的虚拟版本,然后能够提供代码片段来说明正确的代码应该是什么,那么这将对我很有帮助。
目前 jsfiddle 确定选择的答案是正确还是不正确,小提琴在这里:http: //jsfiddle.net/bWthd/3/
实际代码:
PHP/HTML:
$qandaquery = "SELECT q.QuestionId, Answer, AnswerMarks, OptionType
FROM Question q
INNER JOIN Answer an ON q.QuestionId = an.QuestionId
INNER JOIN Option_Table o ON q.OptionId = o.OptionId
WHERE SessionId = ?
GROUP BY q.QuestionId
ORDER BY RAND()";
...
$qandaqrystmt->bind_result($qandaQuestionId,$qandaAnswer,$qandaAnswerMarks,$OptionType);
$arrQuestionId = array();
while ($qandaqrystmt->fetch()) {
$arrQuestionId[ $qandaQuestionId ] = $qandaQuestionId;
}
foreach ($arrQuestionId as $key=>$question) {
?>
<div class="queWrap" data-q_id="<?php echo $key; ?>">
$options = explode('-', $arrOptionType[$key]);
if(count($options) > 1) {
$start = array_shift($options);
$end = array_shift($options);
do {
$options[] = $start;
}while(++$start <= $end);
}
else{
$options = explode(' or ', $option);
}
if($arrReplyType[$key] == 'Single'){
foreach($options as $indivOption) {
echo '<div class="ck-button"><label class="fixedLabelCheckbox"><input type="radio"
name="options_<?php echo $key; ?>[]" id="option-' . $indivOption . '" value="' .
$indivOption . '" /><span>' . $indivOption . '</span></label></div>';
}
}else if($arrReplyType[$key] == 'Multiple'){
foreach($options as $indivOption) {
echo '<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-' . $indivOption . '" value="' . $indivOption . '" /><span>' . $indivOption . '</span></label></div>';
}
}
<p><input type='text' class='questionIds' name='questionids' value='<?php echo htmlspecialchars($arrQuestionId[$key]); ?>' /></p>
}
JAVASCRIPT/AJAX:
$(function() {
$('.queWrap .ck-button').change(function() {
var $ch_box = $(this),
$qwrap=$ch_box.closest('.queWrap')
q_id = $qwrap.data('q_id'),
val = $ch_box.val();
var dataToServer = {
q_id: q_id,
valueSelected: val
}
$.post('connect.php', dataToServer,function(){
var status=response.status
$qwrap.find('.status').text( status).addClass(status);
if( status=='correct'){
updateScore( response.points)
}
})
})
function updateScore( newScore){
var score= $points.data('score')+newScore;
$points.data('score',score).text( 'Score: '+score)
}
});
更新:
当前代码:
function update() {
var score = 0;
$('.queWrap').each(function(element) {
var $qwrap = $(element),
q_id = $qwrap.data('q_id'),
val = $qwrap.find('input:checked').val();
var dataToServer = {
q_id: q_id,
valueSelected: val
}
$.post('connect.php', dataToServer,function(response){
var status = response.status
$qwrap.find('.status').text(status).addClass(status);
if (status == 'correct'){
score += response.points;
$points.data('score', score).text('Score: ' + score);
}
})
});
}
...
//HTML
<div class="status"> </div>
好的,没有错误,但没有出现和计算标记。是不是因为connect.php
我包含在javascript函数中。我是否需要导航到连接到 dbconnect.php
的页面或导航到运行查询以查找每个选定答案的答案标记的页面?我的时间不多了,所以请您尽快为我实现代码,因为我必须完成它。我希望发生以下情况:
计算每个选择的答案的分数,如果选择的答案不正确,那么值就是
0
那些答案,如果答案正确,那么它的分数是从数据库中确定的。如何让每个正确答案按钮包含它自己的 answerId?要确定 answerId,我们可以使用文本输入中显示的 questionId(参见顶部的 PHP/HTML 代码片段),然后根据每个答案按钮的值,检索与每个问题的答案值匹配的 answerid。
下面是显示的示例数据库Answer Table
AnswerId (auto PK) QuestionId Answer AnswerMarks
1 72 A 2
2 72 C 1
3 73 B 2
4 73 C 2
5 73 E 1