0

再帰関数を作成し、ループのインデックスをインクリメントして、最新のインデックス ループから XML ファイルの読み取りを開始しようとしています。しかし、何らかの理由で、ループは常に、指定されたインデックスから開始するのではなく、XML ファイルの先頭から再開されますprocessXML(indexValue + 1); 。この問題を解決するにはどうすればよいですか? 関数を再起動するが、最初からではなく、最後に指定されたインデックスからループするようにjQueryに指示するにはどうすればよいですか?

私を助けてください、これは私を夢中にさせています。正しい答えをくれる人は、きっと受け入れる。助けてくれてありがとう!

function processXML(indexValue) {
    $.ajax({
        url: "../broadcasted.xml",
        dataType: "xml",
        cache: false,
        success: function(d) {
            var length = $(d).find('tweet').length;
            $(d).find('tweet').each(function(indexValue) {

                var cvdIndexId = $(this).find("index");
                var cvdTweetAuthor = $(this).find("author").text();
                var cvdTweetDescription = $(this).find("description").text();
                setTimeout(function() {
                    if (indexValue == (length - 1)) {
                        processXML(indexValue + 1);
                        //return false;
                        //count = index + 1;
                        //alert(index+1);
                    } else if (cvdTweetAuthor === "Animator") {
                        $('#cvd_bubble_left').html('');
                        obj = $('#cvd_bubble_left').append(makeCvdBubbleAnimator(cvdIndexId, cvdTweetAuthor, cvdTweetDescription));
                        obj.fitText(7.4);
                        $('#cvd_bubble_right').html('');
                    } else {
                        $('#cvd_bubble_right').html('');
                        obj = $('#cvd_bubble_right').append(makeCvdBubble(cvdIndexId, cvdTweetAuthor, cvdTweetDescription));
                        obj.fitText(7.4);
                        $('#cvd_bubble_left').html('');
                    }
                }, indexValue * 1000);
            });
        }

    });
}
4

1 に答える 1

0

このようなことを試してください。それを開始するには、broadcastedXMLProcessStart() を呼び出します。

var broadcastedXML;
var broadcastedXMLIndex=0;

function broadcastedXMLProcessStart() {
    $.ajax({
        url: "../broadcasted.xml",
        dataType: "xml",
        cache: false,
        success: function(d) {
          broadcastedXML = d;
          // set broacastedXMLIndex=0 here to start from beginning
          broadcastedXMLProcessTick();
        }
    });
}

function broadcastedXMLProcessTick() {
    var d = broadcastedXML;
    var nextIndex = broadcastedXMLIndex;

    var length = $(d).find('tweet').length;
    $(d).find('tweet').eq(nextIndex).each(function(idx) {    
        var cvdIndexId = $(this).find("index");
        var cvdTweetAuthor = $(this).find("author").text();
        var cvdTweetDescription = $(this).find("description").text();

        if (cvdTweetAuthor === "Animator") {
            $('#cvd_bubble_left').html('');
            obj = $('#cvd_bubble_left').append(makeCvdBubbleAnimator(cvdIndexId, cvdTweetAuthor, cvdTweetDescription));
            obj.fitText(7.4);
            $('#cvd_bubble_right').html('');
        } else {
            $('#cvd_bubble_right').html('');
            obj = $('#cvd_bubble_right').append(makeCvdBubble(cvdIndexId, cvdTweetAuthor, cvdTweetDescription));
            obj.fitText(7.4);
            $('#cvd_bubble_left').html('');
        }

    });
    if(nextIndex+1 > length) {
      setTimeout('broadcastedXMLProcessStart()', 1000);
    } else {
      broadcastedXMLIndex++;
      setTimeout('broadcastedXMLProcessTick()', 1000);
    }
}
于 2013-06-11T14:32:29.273 に答える