javascript - 节点 ejs 在单击时执行脚本
问题描述
我有一个使用图形 api 的简单函数,我想在用户按下按钮时运行它。我正在运行的文件是一个 ejs 文件,其中页眉和页脚作为代码的前缀和后缀。
我的代码如下:
<%- include("./partials/header")%>
<script type="text/javascript" src ="https://cdn.jsdelivr.net/npm/chart.js@2.9.3/dist/Chart.min.js"></script>
<button onclick="<%Functions.common1()%>">Click me</button>
<canvas id="myChart" width="400" height="300"></canvas>
<button onclick="<%Functions.common1()%>">Graph me</button>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
});
</script>
<%- include("./partials/footer")%>
我有一个名为 common1 的函数,它是另一个名为 functions 的文件中的导出函数,它只是 console.logs 一个字符串。我希望运行整个脚本以单击按钮运行图形,我该怎么做?
解决方案
您不能直接从客户端代码触发服务器端代码。
当从服务器请求页面时:
- EJS 模板将被执行
<%Functions.common1()%>
将被评估(您说它只是记录一个字符串,因此此时它将在服务器的控制台上执行此操作)- 结果(包括
onclick=""
因为<%Functions.common1()%>
没有向模板输出任何内容)将被发送到浏览器。 - 单击不会执行任何操作,因为
onclick
函数体是空的
如果您想common1()
在单击按钮时在服务器上执行,那么您需要编写一个 Web 服务来执行此操作,然后使用 HTTP 请求触发它(例如,fetch
从onclick
函数中使用)。
如果要common1()
在单击按钮时在浏览器上执行,则需要使用<script>
元素将其包含在页面中,并将函数调用直接放在onclick
函数中(即不在 EJS 标记内)。
如果您想运行在单击时生成图形的代码,则将其放入函数中并调用该函数。
进一步阅读:客户端和服务器端编程有什么区别?.
推荐阅读
- curl - unexpectedly website returns redirection to itself
- python - Where to get the raw html code in dash/layout/html to print local pdf after executing dash app?
- statistical-test - What statistical test should I use?
- c++ - 多维动态数组的内存丢失
- php - How to draw BarChart with MySQL data in React native?
- r - Invalid factor level, NA generated (if-else statement won't work) in R
- java - Java 日历中的前一天不正确
- perl - how do parsing DynamicWebsite data
- postgresql - ALTERING MULTIPLE TABLES IN POSTGRES
- autohotkey - 在循环中无法执行任何其他操作