js脚本是否可以获取在同一文件中的EJS上下文/页面中写入的变量

Don*_*ant 11 javascript scope ejs

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

EJS:

<% var test = 101; %>
Run Code Online (Sandbox Code Playgroud)

JS:

<script>
    var getTest = test;
</script>
Run Code Online (Sandbox Code Playgroud)

或者如果我想使用写入EJS文件的函数(带参数)并在JS上下文中使用此函数,其中参数是从JS上下文赋予函数的

EJS:

<% function fn(par){ ... } %>
Run Code Online (Sandbox Code Playgroud)

JS:

<script>
   var test = 101;
   <%>fn(test)<%> 
</script>
Run Code Online (Sandbox Code Playgroud)

Nae*_*ikh 19

编辑:这一半认为你在服务器端使用EJS

1)您可以将ejs变量值传递给Javascript变量

        <% 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>
Run Code Online (Sandbox Code Playgroud)

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

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

2)您不能将javascript变量值传递给ejs变量

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

为什么:

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


编辑:这一半认为你在客户端使用EJS

3)如果EJS在客户端,并将EJS变量传递给javascript

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

4)如果EJS在客户端,并将javascript变量传递给EJS

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


hug*_*ook 8

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

<div id="mydiv" data-test=<%= test %>></div>
Run Code Online (Sandbox Code Playgroud)

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

<script>var test = document.getElementById('mydiv').dataset.test</script>
Run Code Online (Sandbox Code Playgroud)

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


小智 6

用字符串解决

<% 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>  
Run Code Online (Sandbox Code Playgroud)
不要忘记“<%= test %>”周围的引号