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

前端function categoryDetails回调中使用模板语法访问data.result提示'data'未定义的问题求助

问题根源与解决方案

嘿,我一眼就看出问题出在哪了——你把服务器端模板引擎语法和前端JavaScript逻辑混在一起用啦!

为什么会报错?

你的{% for i in data.result %}和{{ i.label }}是服务器端模板(比如Django的Jinja2、Flask模板)的语法,这些代码是在服务器把页面发送给浏览器之前就完成渲染的。但你现在是在前端的done回调里动态生成HTML字符串,这时候服务器早就完成页面渲染了,模板引擎根本不会再处理这段字符串;而且服务器在最初渲染页面的时候,也完全不知道你前端JS里的data变量,所以才会报'data' is undefined的错误。

正确的解决方法

既然是前端动态生成HTML,就得用JavaScript的循环逻辑来遍历data.result,手动拼接(或创建)DOM元素。下面给你两种可行的写法:

写法1:字符串拼接(简单直接)

function categoryDetails(catId, code, label) { 
    alert('Inside Categories Detail') 
    $.post("/product/categories", { catId: catId, code: code, label: label, sess: socket.id }).done(function(data) { 
        alert("Inside product capacity" + data.result) 
        console.log(data.result) 
        // 初始化HTML开头部分
        let botHtml = '<div class="nn-bot-bubble"><div class="nn-bot-chips">';
        // 用JS的forEach遍历数据,拼接每个按钮
        data.result.forEach(function(item) {
            // 用模板字符串插入变量,可读性更好
            botHtml += `<button id="sel_btn" value="${item.label}"> ${item.label} </button>`;
        });
        // 补充HTML结尾部分
        botHtml += '</div></div>';
        $(".chat_block").append(botHtml); 
    }); 
}

写法2:创建DOM元素(更安全,推荐)

如果item.label包含特殊字符(比如引号),字符串拼接容易出现HTML语法错误,甚至有XSS风险,推荐用jQuery直接创建DOM元素:

function categoryDetails(catId, code, label) { 
    alert('Inside Categories Detail') 
    $.post("/product/categories", { catId: catId, code: code, label: label, sess: socket.id }).done(function(data) { 
        alert("Inside product capacity" + data.result) 
        console.log(data.result) 
        // 创建外层容器
        const botBubble = $('<div class="nn-bot-bubble"><div class="nn-bot-chips"></div></div>');
        const chipsContainer = botBubble.find('.nn-bot-chips');
        // 遍历数据,逐个创建按钮并添加到容器
        data.result.forEach(function(item) {
            const btn = $('<button>')
                .attr('id', 'sel_btn')
                .attr('value', item.label)
                .text(item.label);
            chipsContainer.append(btn);
        });
        // 将整个容器添加到页面
        $(".chat_block").append(botBubble); 
    }); 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:07:54