我有一个我多次使用的功能,但在这一个修改的情况下,我似乎错过了一些东西。我有一个var listHTML
,我用它作为附加HTML的基础,所以我可以在for循环完成后更新div的HTML,但无论出于何种原因,在for循环完成后var的值为NULL 。我认为在循环运行之前在循环外部创建对var的引用足以将其保留在内存中,直到函数结束...猜不行。
代码:
var listHTML = '';
for(var j = 0; j < arr.length; j++)
{
var product = arr[j].split(",");
var key = product[1];
$.ajax({
url:"http://domain.com/dir/get.php?key="+encodeURIComponent(key),
dataType: 'jsonp',
success:function(json){
var i = 0;
while(json[i])
{
listHTML += '<div class="row">';
listHTML += '<div class="image"><img src="'+json[i]["image"]+'"/></div>';
listHTML += '<div class="title">'+json[i]["title"]+'</div>';
listHTML += '<div class="quantity"><input type="number" id="'+key+'" value="'+product[0]+'"/></div>';
listHTML += '<div class="actions"><img src="/_newsite/images/icons/trash.png" onclick="removeFromCart('+"'"+key+"'"+')" title="Remove From Cart/><img src="/_newsite/images/icons/update.png" onclick="updateCart('+"'"+key+"'"+')" title="Update Quantity"/></div>';
listHTML += '</div>';
i++;
}
console.log(listHTML);
},
error:function(){
alert("Error");
},
});
}
console.log(listHTML);
当在for循环中运行console.log时,它会返回我期望的正确值,但是在for循环外的函数末尾的那个返回null。
答案 0 :(得分:2)
您的ajax成功回调会在您的函数完成后稍后调用。 Ajax中的“A”代表异步。
因此,当您的函数完成时,listHTML
未被触及。您需要在成功回调函数中修改listHTML
并在那里使用它,或者将其作为您在成功回调中调用的参数传递给另一个函数。您不能以尝试的方式在成功处理程序之外使用它。