[英]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.