0

在 Firefox 和 Safari 中出现问题,但在 Chrome 中它可以正常工作。

这个 javascript 数组包含测验问题,我一次显示一个。但是,有时并非所有记录都被迭代。我使用了控制台,它肯定会加载所有问题,但有时仍会跳过一条记录(通常只有第一个)。

编辑:我注意到这个数组适用于测验,所有问题都是有序的,即数组中的 290,291,293。但是在一个不工作的例子中,测验 ID 的顺序是这样的,286,285,287,288 和 285 是被跳过的,这可能是问题的一部分。

这是我的Javascript数组代码,请帮我解决这个问题。

var currentquestion;

        jQuery.ajax({
                    url:"quizajax.php",


        dataType: "json",
                data: { 
                    quizidvalue: <?=$thisquizid?>
                },
        }).done(function(data) {
                questions = data;
                for(i in data){
                    console.log(data[i]);

                }
            });

function nextQuestion (){
        for(i in questions) {
            if(i<=currentquestion)
                continue;

            currentquestion = i;

            for(y in questions[i]) {
                console.log("CurrentA: "+ currentquestion);
                console.log("I: " + i);
                console.log(questions[i][y].answerid);
            }
            console.log("CurrentQ: "+ currentquestion);
            console.log("I: " + i);
            console.log(questions[i]);
            questionVariables ();
            break;
        }

来自 db 的示例代码,

 questionid | quizid | questiontype |   qdescription   |           qfilelocation            | noofanswers | answertype 
------------+--------+--------------+------------------+------------------------------------+-------------+------------
        285 |     55 | text         | 6 answer text    | null                               |           6 | text
        287 |     55 | text         | 4ans text q      | null                               |           4 | text
        289 |     55 | text         | 2 answers text q | null                               |           2 | text
        286 |     55 | text         | 5 answer text q  | null                               |           5 | text
        288 |     55 | text         | 3 answer text q  | null                               |           3 | text
        290 |     55 | image        | image q and a    | image/55/712013a88298585d415c.jpeg |           4 | image
        291 |     55 | video        | video q and a    | video/55/8efa10195f0c20d1254f.mp4  |           4 | video
4

1 回答 1

1

continue语句导致循环跳过部分执行。尝试调试,看看代码逻辑哪里有错误。

    for(i in questions) {
        if(i<=currentquestion) {
            console.log('Skipping question: ' + i); // add debugging
            continue;
        }
        ...

编辑:(基于更新的几条评论)

  1. 最好使用传统的 for 循环遍历数组:

    for (var i = 0, len = questions.length; i < len; i++) {
    

    但是外部循环不需要事件

  2. 如果初始化var currentquestion = 0;外循环可以替换

    function nextQuestion (){
    
        for(y in questions[currentquestion]) {
            console.log("CurrentA: "+ currentquestion);
            console.log(questions[currentquestion][y].answerid);
        }
        console.log("CurrentQ: "+ currentquestion);
        console.log(questions[currentquestion]);
        questionVariables ();
        currentquestion++; //update here
    }
    
  3. 看起来您的代码取决于顺序,因此您可以排序

    .done(function(data) {
        questions = data;
        questions.sort(function(q1,q2){
    
        //assuming questionid is the correct property
            if (q1.questionid < q2.questionid) {
                return -1;
            } else if (q1.questionid > q2.questionid) {
                return 1;
            }
            return 0; 
        });
        ...
    
  4. 您可以使用jquery.getJSON$.ajax( { success ....})
  5. 您可能应该currentquestion = 0;在 done 方法中重置。
于 2013-03-25T13:20:04.870 回答