3

我的 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">&nbsp;</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
4

1 回答 1

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);
                }
            });  
        });

    }

}

每次更改答案时都应调用此函数。(我不确定这只是一个例子)。

于 2013-02-18T07:43:22.677 回答