Jquery 对 ul 的 append() 不适用于嵌套的 $.each 循环

Jquery append() to ul not working with nested $.each loops

我目前在使用 JQuery 和 json 数据将计算出的 <li> 元素数量附加到 <ul> 时遇到问题。这是我的代码:

$.getJSON("http://api.hivemc.com/v1/game/timv", function(data) {

        $.each(data.achievements, function(key,value){

            var unlocked = "Locked";

            $.each(maindata.achievements, function(key2,value2){
                if(value.name == key2){
                    unlocked = "Unlocked";
                }
            });

            $("#achs").append("<li><p>" + value.publicname + "</p><span>"+ unlocked + "</span></li>");
        });
    });

如您所见,我正在从 URL 中获取 JSON 数据。在这之中,有着阵法的成就。变量 maindata 是之前从另一个 $.getJSON().

设置的

对于每个成就,我必须将一个包含成就数据的 <li> 元素附加到 ID 为 #achs<ul> 中。但是,为了查看成就是否已解锁,我必须在 maindata JSON 中检查成就名称,这意味着当前 $.each() 循环中的另一个 $.each() 循环.

没有额外的循环,代码运行良好,并成功形成成就列表以及是否解锁。但是,每当我再次添加额外的 $.each() 时,它仅在我重新加载页面或返回并再次返回时才有效。

有谁知道为什么会这样?任何帮助将不胜感激,因为我相信您会看到我对 JQuery 不是很有经验。此外,我已经能够仅使用 PHP 检索 JSON 数据来执行此操作,但我想看看使用 JQuery 是否比 PHP 加载更快。

maindata JSON 是从此代码中检索到的:`var maindata;

    $.getJSON("http://api.hivemc.com/v1/player/" + $user + "/timv", function(data) {
        $('#1').text(data.total_points);
        $('#2').text(data.i_points);
        $('#3').text(data.t_points);
        $('#4').text(data.d_points);
        $('#5').text(data.role_points);
        $('#6').text(data.most_points);

        maindata = data;

        if(data.detectivebook == true)
            $('#7').text("Yes");
        else
            $('#7').text("No");

        $flare = data.active_flareupgrade;
        $flare = $flare.charAt(0).toUpperCase() + $flare.slice(1).toLowerCase();
        $('#8').text($flare);
        $('#9').text(data.title);
        var d = new Date(data.lastlogin * 1000);
        var n = d.toISOString(); 
        $('#10').text(d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear());

        $.getJSON("http://api.hivemc.com/v1/game/timv", function(data2) {

        $.each(data2.achievements, function(key,value){

            var unlocked = "Locked";

            $.each(maindata.achievements, function(key2,value2){
                if(value.name == key2){
                    unlocked = "Unlocked";
                }
            });

            $("#achs").append("<li><p>" + value.publicname + "</p><span>"+ unlocked + "</span></li>");
        });
    });
    });`

谢谢。

您应该等待之前的 AJAX 调用完成,然后再根据这两个调用的结果进行任何处理:

var promise1 = $.getJSON(...);     // get maindata
var promise2 = $.getJSON(...);     // get data

$.when(promise1, promise2).then(function(maindata, data) {
    // do your processing here
    ...
});

注意:不需要为 $.getJSON 调用提供回调 - 在 .then 回调中进行处理。