我的javascript存在问题。我正在尝试计算每个正确选择的答案的分数,这是由db确定的。如果答案不正确则标记为“0”,否则标记取决于db中的答案标记。
但是我遇到了javascript的问题:
首先它说connect.php
,这只是导航到它连接到db的页面,但是这是正确的还是我想连接到将运行查询查找答案标记的页面?< / p>
其次它说我的代码中没有定义response
而我不应该调用它。
我的问题是我可以对上面的内容进行澄清2.我正在尝试使用ajax和javascript,如果一个强大的程序员可以解决我遇到的这个问题并且能够正确设置代码以便它是能够计算每个正确的答案标记。
我有一个jsfiddle,我试图遵循,但如果有人可以编辑小提琴有一个虚拟版本工作计数标记,然后能够提供代码片段陈述正确的代码应该是什么,那么这将帮助我得多。
当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>
好的没有错误,但没有标记出现和计算。是因为我在javascript函数中包含的connect.php
。我是否需要导航到连接到db connect.php
的页面,或者导航到一个页面,在该页面上运行查询以查找每个选定答案的答案标记?我已经没时间了,所以请你尽快为我实现代码,因为我必须完成这个。我想要发生以下事情:
选择每个答案的计数标记,如果选择的答案不正确,那么这些答案的值为0
,如果答案正确,则从数据库确定其标记。如何获得每个正确的答案按钮以包含它自己的答案?
要确定answerId,我们可以使用文本输入中显示的questionId(请参阅顶部的PHP / HTML代码段),然后根据每个答案按钮的值,检索与每个问题的答案值匹配的answerid。 / p>
以下是显示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
答案 0 :(得分:1)
您的updateScore功能有误。您应该将每个问题的点存储在数据元素中,并且在updateScore()函数中,您应该添加所有这些,并将总和放入$ points元素中。像这样:
$(function() {
$('.queWrap .ck-button').change(function() {
update();
});
function update() {
var score = 0;
$('.queWrap').each(function(element) {
var $qwrap = $(element);
var q_id = $qwrap.data('q_id');
var 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);
}
});
});
}
}
应该在每次更改答案时调用此函数。 (我不确定这只是一个例子)。