首页 > 解决方案 > 节点 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 一个字符串。我希望运行整个脚本以单击按钮运行图形,我该怎么做?

标签: javascripthtmlnode.jsfunction

解决方案


您不能直接从客户端代码触发服务器端代码。

当从服务器请求页面时:

  1. EJS 模板将被执行
  2. <%Functions.common1()%>将被评估(您说它只是记录一个字符串,因此此时它将在服务器的控制台上执行此操作)
  3. 结果(包括onclick=""因为<%Functions.common1()%>没有向模板输出任何内容)将被发送到浏览器。
  4. 单击不会执行任何操作,因为onclick函数体是空的

如果您想common1()在单击按钮时在服务器上执行,那么您需要编写一个 Web 服务来执行此操作,然后使用 HTTP 请求触发它(例如,fetchonclick函数中使用)。

如果要common1()在单击按钮时在浏览器上执行,则需要使用<script>元素将其包含在页面中,并将函数调用直接放在onclick函数中(即不在 EJS 标记内)。


如果您想运行在单击时生成图形的代码,则将其放入函数中并调用函数。


进一步阅读:客户端和服务器端编程有什么区别?.


推荐阅读