所以这可能是一个转贴,但我真的不知道如何解释第二个问题。
我有以下代码:

var paragraphsArray = new Array();
function setParagraphs(offSet)
{
    offSet = offSet * 12;
    for (var i = 1; i < 13; i++)
    {
        var parX = i + offSet;
        var testASd = $.get('php/entryParagraphs.php', {idd: parX}).done(function(paragraph)
        {
            //clear paragraph1 div
            document.getElementById("paragraph1").innerHTML = "";
            //create p elements
            var pElem = document.createElement("p");
            pElem.setAttribute("id", "pEntry"+i);
            document.getElementById("paragraph1").appendChild(pElem);
            $("pEntry"+i).text(paragraph);
        });
    }
}


编辑:我删除了第二个循环,因为它是不必要的,出于某种原因,p元素的创建从i==13开始,这是多余的,甚至不应该这样做。

由于某种原因,第二个循环将首先执行,因此,paragraphArray被打印为undefined。我设法通过setTimeout()函数“修复”了订单,但是我仍然收到未定义的消息,而不是值。在第一个循环中,该值可以很好地打印出来,但是如果我尝试将其放在$("p").text(paragraph);中,我也将无法定义。因此,尽管我对执行顺序是正确的,但问题仍然存在!

最佳答案

因为第一个在ajax调用中,所以在paragraphsArray空间中声明global并使用回调函数,请尝试以下操作:

*更新

var paragraphsArray = [];
function setParagraphs(offSet) {
    offSet = offSet * 12;
    var request = 0;
    for (var i = 1; i < 13; i++) {
        var parX = i + offSet;
        var testASd = $.get('php/entryParagraphs.php', {idd: parX}).done(function(paragraph) {
            request++;
            paragraphsArray[request] = paragraph;
            console.log(paragraphsArray[request]);
            if (request === 12) {
                alert('first');
                callback();
            }
        });
    }
}
function callback() {
    for (var i = 1; i < 13; i++) {
        console.log(paragraphsArray[i]);
    }
    alert('second');
}

关于javascript - 为什么第二个循环在第一个循环之前执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23459995/

10-11 13:41