js脚本能否在同一文件中获取用EJS context/page编写的变量

Can a js script get a variable written in a EJS context/page within the same file

正如我在标题中所写,我想从写入 ejs page/file 的变量中获取值,从同一页面中的 javascript 文件中获取值

EJS:

<% var test = 101; %>

JS:

<script>
    var getTest = test;
</script>

或者如果我想使用写入 EJS 文件的函数(带参数)并在 JS 上下文中使用此函数,其中参数从 JS 上下文提供给函数怎么办

EJS:

<% function fn(par){ ... } %>

JS:

<script>
   var test = 101;
   <%>fn(test)<%> 
</script>

编辑:这一半认为您在服务器

使用EJS

1) You can pass an ejs variable value to a Javascript variable

        <% var test = 101; %> // variable created by ejs
        <script>
           var getTest = <%= test  %>;  //var test is now assigned to getTest which will only work on browsers
           console.log(getTest);  // successfully prints 101 on browser
        </script>

只需创建一个ejs变量并将脚本标签内的值赋值给var getTest

例如:var getTest = <%= test %>;

2) You can't pass an javascript variable value to a ejs variable

是的,你不能:如果它在服务器上。

为什么:

EJS 模板将在 Javscript 开始执行之前在服务器上呈现(它将在浏览器上启动),因此无法返回到服务器并要求对已发送的页面进行一些先前的更改到浏览器。


编辑:这一半认为您在客户端

使用EJS

3) if EJS is on client side, and pass EJS variable to javascript

上面的答案仍然有效,但您需要在 EJS 模板中加载 脚本 ,而不是之前加载的脚本呈现的模板(在这种情况下,它当然不是有效的 javascript)。

4) if EJS is on client side, and pass javascript variable to EJS

对不起,我自己没有尝试过这个案例,但我真的很期待有人回答这个案例

以上答案对我不起作用。您可以这样使用 div:

<div id="mydiv" data-test=<%= test %>></div>

并访问您在脚本标记中提供的数据变量 'test':

<script>var test = document.getElementById('mydiv').dataset.test</script>

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset

在你的<script>

里面

您可以创建一个 div 元素:

const div = document.createElement('div');

并给它一个 innerText 值,例如:

div.innerText = `<%= data_from_your_server_response  %>`

如果您console.log(div),将显示来自您的服务器响应的数据。

带字符串的解决方案

<% var test =myString; %> // variable created by ejs
        <script>
           var getTest = "<%= test  %>";  //var test is now assigned to getTest which will only work on browsers
           alert(getTest);  // successfully prints the string on browser
        </script>  
不要忘记 "<%= test %>"

周围的引号