所以这可能是一个转贴,但我真的不知道如何解释我的第二个问题。 我有这段代码:
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
。我设法&#34;修复&#34;使用setTimeout()
函数的顺序,但我仍然得到未定义的消息,而不是值。在第一个循环中,值打印得很好,但是如果我尝试将它放在$("p").text(paragraph);
中,我也会得到未定义的。所以尽管我对执行顺序是正确的,但问题仍然存在!
答案 0 :(得分:1)
因为首先在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');
}
答案 1 :(得分:0)
$.get
是异步功能。第一个周期只发送请求而不会等待响应,因此第二个周期将在第一个周期后立即开始,而不会得到$.get
函数的响应。这就是为什么第二个周期中console.log(paragraphsArray[i]);
显示未定义的原因。
你只能处理第一次响应。
您只能使用$("p").text(paragraph);
,例如:
var testASd = $.get('php/entryParagraphs.php', { idd: parX }).done(function(paragraph) {
paragraphsArray[i] = paragraph;
console.log(paragraphsArray[i]);
alert('first');
$("p").text(paragraph);
});
您不能使用在函数
中分配的变量function(paragraph) {
paragraphsArray[i] = paragraph;
console.log(paragraphsArray[i]);
alert('first');
$("p").text(paragraph);
}
在此功能之外。
要达到你想要的效果,你必须使用另一种方法。
HTML将是:
<div id='paragraphs'>
</div>
JS代码:
var testASd = $.get('php/entryParagraphs.php', { idd: parX }).done(function(paragraph) {
$("#results").append("<p>"+paragraph+"</p>")
});
你应该使用〜这段代码。我只是告诉你的方法。
答案 2 :(得分:0)
在第一个循环内运行第二个循环。
function setParagraphs (offSet) {
//paragraphs
var testing = 0;
var paragraphsArray = new Array();
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) {
paragraphsArray[i] = paragraph;
console.log(paragraphsArray[i]);
alert('first');
for (var i=1;i<13;i++) {
console.log(paragraphsArray[i]);
alert('second');
}
});
}
}