You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery调用饮品API后嵌套循环append仅渲染最后一个索引项问题

代码问题修复说明

核心问题原因

  • 内层配料循环中每次都会重新创建ul元素并覆盖ingList变量,循环结束后ingList仅保留最后一次循环生成的ul,因此只能看到最后一个配料
  • 结构使用错误:多个配料应该作为li子元素放在同一个ul容器下,而不是每个配料单独创建一个ul

修正后完整代码

var queryURL = "https://thecocktaildb.com/api/json/v1/1/search.php?s=" + drinkName

$.ajax({
    url: queryURL,
    method: "GET"
}).then(function (response) {
    console.log(response);
    var results = response.drinks;
    for (var i = 0; i < results.length; i++) {
        console.log(results[i]);
        var eachDrink = results[i];
        var drinkDiv = $("<div>");
        var drinkName = results[i].strDrink;

        // 初始化配料列表容器,放到循环外
        var ingList = $("<ul>").text("Ingredients: ");
        for (var k = 1; k < 16; k++) {
            var currentIng = eachDrink['strIngredient' + k];
            // 非空判断,直接过滤无效空值
            if (currentIng) {
                console.log(currentIng);
                // 单个配料用li元素承载,追加到ul中
                var ingItem = $("<li>").text(currentIng);
                ingList.append(ingItem);
            }
        }

        var pOne = $("<p>").text("Drink name: " + drinkName);
        var drinkInstructions = results[i].strInstructions;
        var pTwo = $("<p>").text("Instructions: " + drinkInstructions);
        var drinkImage = $("<img>");
        drinkImage.attr("src", results[i].strDrinkThumb);

        drinkDiv.append(pOne);
        drinkDiv.append(ingList);
        drinkDiv.append(pTwo);
        drinkDiv.append(drinkImage);

        $("#drinks-view").append(drinkDiv);
    }
})

关键修改点

  • 将ul容器的初始化移到了配料循环外部,保证每个饮品仅生成一个配料列表
  • 每个配料单独创建li元素,非空校验后追加到同一个ul下,不会出现变量覆盖问题
  • 提前完成了空值过滤逻辑,不需要后续额外处理

内容的提问来源于stack exchange,提问作者woodgrainpants

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:36:03