ejs不能读取js变量??????
一、问题描述
用express搭了一个nodejs服务端,为了测试接口数据是否能够正常输出,用ejs作为模版引擎的html文件写js发请求。
1、请求正常,能在network看到,但是没有输出console的结果;
2、ejs不能读取异步js变量。
在服务端,html文件,如何将从接口fetch的数据渲染在ejs模版?
服务端A的html的js的ajax请求服务端A。
二、还原现场
下面介绍两种写法,title都可以拿到,但是在html请求的接口的数据无法正常传递给模版,导致页面无法渲染。
1、手动引入ejs
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<script src="ejs.min.js"></script>
<script type="text/template" id="J_tpl">
<% for(const i = 0; i < data.length; i++) { %>
<details>
<summary><%=data[i].names[0]%></summary>
<p>手机号:<%=data[i].phone%></p>
<p>性别:<%=data[i].sex%></p>
<p>部门:<%=data[i].department%></p>
</details>
<% } %>
</script>
<script type="text/javascript">
// 浏览器端,向服务端发请求。
fetch("/api/person/queryPerson", {
method: "POST",
headers: {
"Content-Type": "application/json"
}
})
.then(function(response) {
console.log(response, "响应");
return response.json();
})
.then(function(jsonData) {
// 1、没有打印console
console.log(jsonData, "返回数据");
const tpl = $("#J_tpl").html();
// 2、data在ejs读取不到
const html = ejs.render(tpl,{data: jsonData.data});
$("#J_dom").html(html);
})
.catch(function() {
console.log("出错了");
});
</script>
</head>
<body>
<h1>人员列表</h1>
<div id="J_dom"></div>
</body>
</html>
2、假设ejs能够读取js异步变量
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<script type="text/javascript">
let globalData = [];
// 浏览器端,向服务端发请求。
fetch("/api/person/queryPerson", {
method: "POST",
headers: {
"Content-Type": "application/json"
}
})
.then(function(response) {
console.log(response, "响应");
return response.json();
})
.then(function(jsonData) {
// 1、没有打印console
console.log(jsonData, "返回数据"); // 2、data在ejs读取不到
globalData = jsonData.data;
})
.catch(function() {
console.log("出错了");
});
</script>
</head>
<body>
<h1>人员列表</h1>
<div id="J_dom">
<% for(const i = 0; i < globalData.length; i++) { %>
<details>
<summary><%=globalData[i].names[0]%></summary>
<p>手机号:<%=globalData[i].phone%></p>
<p>性别:<%=globalData[i].sex%></p>
<p>部门:<%=globalData[i].department%></p>
</details>
<% } %>
</div>
</body>
</html>
三、问题分析
1、在服务端,无法将js变量传给ejs变量。(待论证)
EJS模板将在服务器上呈现Javscript开始执行(它将在浏览器上启动),因此无法返回到服务器并要求已经发送到浏览器的页面上的某些先前更改。
四、解决方案
ejs不能读取js变量??????的更多相关文章
- javascirpt对象运用与JS变量
abcdefghijklmnopqrstuvwyz String 对象方法 charAt() 方法可返回指定位置的字符.stringObject.charAt(index)(index从0开始)[ht ...
- js变量以及其作用域详解
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp73 一.变量的类型 Javascript和Java.C这些语言不同 ...
- js变量以及其作用域
一.变量的类型 Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量.例如: ...
- js字符串转换为数字的三种方法。(转换函数)(强制类型转换)(利用js变量弱类型转换)
js字符串转换为数字的三种方法.(转换函数)(强制类型转换)(利用js变量弱类型转换) 一.总结 js字符串转换为数字的三种方法(parseInt("1234blue"))(Num ...
- js变量及其作用域(附例子及讲解)
Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量 工具/原料 Ch ...
- [CentOS] 解决 crontab 无法读取环境变量的问题
参考资料:http://blog.slogra.com/post-238.html 1. 问题描述 一段数据处理的 shell 程序,在 shell 中手动运行,可以正确执行.但是,把它放在 cron ...
- js变量及其作用域
Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量 一.js变量的类型及 ...
- JS变量和函数的一些理解
今日看了下JS变量的一些文章,有些感触,把自己总结的一些写出来. JS初始化的过程1.JS解释器执行代码之前,创建全局变量2.用预定义的值和函数来初始化全局对象中的属性,3.搜索函数外的var声明,创 ...
- js变量在属性里的写法 常用mark 多个DL遍历添加一个父级DIV
标记用 js变量比如url链接一般都是a里面的href属性值 在js里单引号链接 以后再忘记就能有地方找了 例子: /* 添加1200 居中div 包裹 获取元素集合 上层元素100% * @ele ...
随机推荐
- oracle中删除表:drop、delete、truncate
相同点,使用drop delete truncate 都会删除表中的内容 drop table 表名 delete from 表名(后面不跟where语句,则删除表中所有的数据) truncate t ...
- wordpress调用置顶文章sticky_posts的三种方法
有时我们在开发wordpress时需要调用置顶文章sticky_posts,怎么调用呢?几种写法,有用到query_post的,有用到WP_Query,也有用到is_sticky(),下面随ytkah ...
- sparkjob的提交流程
在使用spark-submit提交一个Spark应用之后,Driver程序会向集群申请一定的资源来启动东若干个Executors用来计算,当这些Executors启动后,它们会向Driver端的Sch ...
- 文件搜索命令——grep
1.查找关键字在文件中的一行的信息: 2.不区分大小写进行查询: #号开头表示注释行,并不是配置文件. 3.grep -v(排除查找): -v 可以去除掉某些没用的行,以上命令可以去除掉以#号开头的注 ...
- 洛谷 P1786 帮贡排序 题解
P1786 帮贡排序 题目背景 在absi2011的帮派里,死号偏多.现在absi2011和帮主等人联合决定,要清除一些死号,加进一些新号,同时还要鼓励帮贡多的人,对帮派进行一番休整. 题目描述 目前 ...
- 【JZOJ6246】【20190627】B
题目 求逆续对个数为\(k\)的\(n\)阶排列个数\(mod \ 1e9+7\) $1 \le n , k \le 10^5 $ 题解 $f_{i,j} = \sum_{k=0}^{i-1} f ...
- IntelliJ IDEA 2019从入门到癫狂 图文教程!
阅读本文大概需要 6 分钟. 作者:yizhiwazi 来源:www.jianshu.com/p/9c65b7613c30 前言:IntelliJ IDEA 如果说IntelliJ IDEA是一款现代 ...
- [原创]浅谈对任务分解法WBS应用
[原创]浅谈对任务分解法WBS应用 1.WBS是什么? 即Work Breakdown Structure如何进行WBS分解:目标→任务→工作→活动 2.WBS分解的原则:将主体目标逐步细化分解,最底 ...
- 深入kubernetes调度之NodeSelector
Kubernetes的调度有简单,有复杂,指定NodeName和使用NodeSelector调度是最简单的,可以将Pod调度到期望的节点上. 1 NodeNamePod.spec.nodeName用于 ...
- Pyhton学习的基础
函数->功能, 如print(),input(),range(), 方法->功能, 如index()(尽量不用此方法),find(),类里面的函数就叫做方法 容器->列表,字符串,元 ...