0

我有一个我多次使用过的功能,但在这种修改的情况下,我似乎遗漏了一些东西。我有一个 varlistHTML用作附加 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);

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

4

1 回答 1

2

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

因此listHTML当你的函数完成时没有被触及。您需要listHTML在成功回调函数内部进行修改并在其中使用它,或者将其作为从成功回调中调用的参数传递给另一个函数。您不能以您尝试的方式在成功处理程序之外使用它。

于 2013-04-29T00:10:23.670 回答