所以这可能是一个转贴,但我真的不知道如何解释第二个问题。
我有以下代码:
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/