Может ли скрипт js получить переменную, записанную в контексте/странице EJS в том же файле

Как я написал в заголовке, я хотел бы получить значение из переменной, записанной в страницу/файл ejs, из файла javascript на той же странице.

ЭДС:

<% var test = 101; %>

JS:

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

Или что, если я хочу использовать функцию (с параметром), записанную в файл EJS, и использовать эту функцию в контексте JS, где параметр передается функции из контекста JS.

ЭДС:

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

JS:

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

person Donovant    schedule 19.02.2015    source источник
comment
Если вы используете серверную часть ejs, вам нужно сделать что-то вроде затем ответ Наима Шейха, но вам, вероятно, следует сделать это по-другому (зависит от конкретного варианта использования). Если вы запускаете клиентскую часть ejs, это все равно будет работать, но тогда вы, скорее всего, не ошибетесь в проектном решении.   -  person t.niese    schedule 19.02.2015


Ответы (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

Ex: var getTest = <%= test %>;

2) Вы не можете передать значение переменной javascript в переменную ejs.

Да, нельзя: если он на сервере.

Почему:

Шаблон EJS будет отображаться на сервере до того, как начнется выполнение Javscript (он запустится в браузере), поэтому нет возможности вернуться на сервер и запросить некоторые предыдущие изменения на странице, которая уже отправлена ​​в браузер.


Изменить: эта половина считает, что вы используете EJS на стороне клиента.

3) если EJS находится на стороне клиента, и передать переменную EJS в javascript

Приведенный выше ответ по-прежнему будет работать, но вам потребуется загрузить скрипт в шаблоне EJS, а не скрипт, загруженный до отображения шаблона (в этом случае он будет: конечно, не может быть действительным javascript).

4) если EJS находится на стороне клиента, и передать переменную javascript в EJS

Мне жаль, что я сам не пробовал это дело, но я очень жду, если кто-то ответит на это дело.

person Naeem Shaikh    schedule 19.02.2015
comment
Что, если я хочу использовать функцию с параметром, написанным в контексте EJS, и параметр должен быть вставлен из контекста сценария js? ЭДС: <%>function fn(par){ . . .}<%>; ДС: var test=101; <%>fn(test)<%> - person Donovant; 19.02.2015

Приведенный выше ответ не сработал для меня. Вы можете использовать div следующим образом:

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

И получите доступ к переменной данных «тест», которую вы указали в теге скрипта:

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

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

person Hugo    schedule 21.08.2019

Решение со строкой

<% 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>  
Don't forget the quotes around "<%= test %>"

person Laurent Gevaert    schedule 07.10.2020

Внутри вашего <script>,

вы можете создать элемент div:

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

и присвойте ему значение innerText, например:

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

Если вы console.log(div), будут отображаться данные из ответа вашего сервера.

person we_mor    schedule 23.04.2020