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

wkftcu5l  于 2023-05-12  发布在  Java
关注(0)|答案(6)|浏览(157)

正如我在标题中所写的,我想从一个写入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>
2exbekwf

2exbekwf1#

编辑:本半会认为您在server侧使用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变量,并将script标记中的值赋给var getTest
例如:var getTest = <%= test %>;
2)你不能把一个javascript变量值传递给一个ejs变量
是的,您不能:如果它在服务器上。

原因:

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

编辑:本半会认为您使用的是Client侧的EJS

3)如果EJS在客户端,则将EJS变量传递给javascript
上面的答案仍然有效,但是你需要在EJS模板中加载***脚本***,而不是在模板渲染之前加载的脚本(在这种情况下,它当然不是有效的javascript)。
4)如果EJS在客户端,则将javascript变量传递给EJS
我很抱歉我自己没有尝试过这种情况下,但我真的很期待,如果有人回答这个问题

wlp8pajw

wlp8pajw2#

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

whlutmcx

whlutmcx3#

带字符串的解决方案

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

xjreopfe

xjreopfe4#

如果test是一个对象,你可以这样做:

<script>
  let getTest = <%- JSON.stringify(test) %>
</script>

不过,根据您的代码编辑器的不同,它可能会显示此语法不好,并使用红色下划线将其标记为语法错误。但是,当您运行它时,它工作得非常好。

7ajki6be

7ajki6be5#

在你的<script>里面
你可以创建一个div元素:

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

并给予它一个innerText值,如下所示:

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

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

9njqaruj

9njqaruj6#

下面是一个不使用div的解决方案,也不会让我的代码编辑器发疯。

<%-'<script>'%>
  let testVar = <%-JSON.stringify(testVar)%>;
<%-'</script>'%>

<script>
  //main script that uses testVar
</script>

相关问题