Javascript变量提前发布

Javascript变量提前发布,javascript,json,for-loop,Javascript,Json,For Loop,我有一个函数我已经使用过多次,但在这一次的修改中,我似乎遗漏了一些东西。我有一个varlistHTML,我使用它作为附加HTML的基础,这样我就可以在for循环完成后更新div的HTML,但无论出于什么原因,在for循环完成后,var的值都是NULL。我认为在循环运行之前在循环外部创建对var的引用就足以将其保存在内存中,直到函数结束为止……我猜不是 代码: var listHTML=''; 对于(var j=0;j

我有一个函数我已经使用过多次,但在这一次的修改中,我似乎遗漏了一些东西。我有一个var
listHTML
,我使用它作为附加HTML的基础,这样我就可以在for循环完成后更新div的HTML,但无论出于什么原因,在for循环完成后,var的值都是NULL。我认为在循环运行之前在循环外部创建对var的引用就足以将其保存在内存中,直到函数结束为止……我猜不是

代码:

var listHTML='';
对于(var j=0;j

当console.log在for循环内运行时,它将返回我期望的正确值,但在for循环外函数末尾的值将返回null。

在函数完成后的某个时间调用ajax成功回调。Ajax中的“A”表示异步


因此,当函数完成时,
listHTML
未被触动。您需要在success回调函数中修改
listHTML
,并在那里使用它,或者将它作为参数传递给另一个函数,您可以从success回调中调用它。您不能在成功处理程序之外以您尝试的方式使用它。

哦!哼!这很有道理!非常感谢。
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);