繁体   English   中英

无法在Express / Jade模板中的Javascript函数中访问JSON数据

[英]Trouble Accessing JSON Data in a Javascript Function Within an Express/Jade Template

我是Express / Jade的新手,如果这是一个愚蠢的问题,我深表歉意。

我正在将JSON数据传递到Jade模板中,但是,尽管数据确实存在并且可以在页面的其他位置使用,但是我似乎无法在同一页面的Javascript函数中访问它。

有问题的代码如下所示:

script.
    function populateData(value){
        console.log("Value = " + value);
        for(i = 0;i <= 3;i++){
            console.log("i = " + i);
            if(value==i){
                console.log("school = " + mydata.sclist[i].sName);
                $('#input_sid').val(mydata.sclist[i].sID);
                $('#input_spc').val(mydata.sclist[i].sPostcode);
            }
        }
    }
form#form_add_booking(name="addbooking",method="post",action="/addbooking")
    table.formtable
        tr
            td
                span
                    b School Name
            td
                select#input_sname(name="sname" onChange="populateData(this.value)")
                    option.
                        ======    select    ======
                    each school, i in mydata.sclist
                        option(value=i).
                            #{school.sName}

因此,在上面的代码中,使用JSON中的学校名称正确填充了SELECT列表,但是,当onChange属性触发Javascript函数时,我得到了一个“未捕获的ReferenceError,未定义” mydata”。

我想念什么?

我假定在渲染页面时将mydata传递给了jade。 然后,页面以呈现的HTML形式从服务器返回到客户端(Web浏览器)。 然后,您将无法访问mydata变量,因为它仅在服务器端用于呈现页面。 (选择显示在服务端)

为了能够以所需的方式访问数据,除了上面的代码之外,您还必须渲染javascript变量,然后才能在客户端使用它。 (更改选择时)

const clientSideData = !{(JSON.stringify(mydata))};

将其放置在populateData最顶部(它将JSON对象转换为字符串),然后将函数中的mydata引用替换为clientSideData 这样,即使您从客户端访问数据,也可以呈现javascript变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM