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

IT技术 javascript scope ejs
2021-02-26 00:11:33

正如我在标题中所写,我想从写入 ejs 页面/文件的变量中获取值,从同一页面内的 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>
4个回答

编辑:这一半认为您在服务器使用 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>

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

前任: var getTest = <%= test %>;

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

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

为什么:

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


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

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

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

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

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

好像你需要给type="text/javascript"script使第一选择工作。
2021-04-27 00:11:33
我已经尝试了第一个解决方案,但它不起作用,我确实对“测试”进行了控制台,并且它显示了一个syntax error是合理的,因为脚本标记内部只有 JS 代码可以去,<%%>而不是 JS 的一部分。Naeem,你能解释一下它对你的工作方式吗?
2021-05-08 00:11:33
如果我想使用一个函数,带参数,写在 EJS 上下文中,并且参数应该从 js 脚本上下文中放入?EJS: <%>function fn(par){ . . .}<%>; JS:var test=101; <%>fn(test)<%>
2021-05-11 00:11:33

上面的答案对我不起作用。您可以这样使用 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

用字符串解决

<% 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 %>”周围的引号

在你的里面<script>

你可以创建一个div元素:

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

并给它一个innerText值,如:

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

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