Как мне отправить значение с моим HTML, которое доступно из Javascript?

Часто Javascript на веб-странице должен иметь возможность доступа к переменным, которые известны на сервере. Например, имя пользователя пользователя. Предположим, что мы не хотим делать запрос JSON/XML, так как это излишне увеличит сложность, а также количество посещений страницы. Мы хотим отправить данные вместе с HTML /Javascript.

Один из способов отправить данные - вставить их в Javascript.

var x={{username}};

Другая идея заключается в том, чтобы создать мета-элемент в заголовке и сохранить данные там, а затем использовать jQuery (или его эквивалент) для его извлечения.

Является ли один из этих методов предпочтительнее другого или есть какие-то другие методы, которые я должен рассмотреть?

4 ответа

Решение

Является ли один из этих методов предпочтительнее другого или есть какие-то другие методы, которые я должен рассмотреть?

Я не думаю, что есть единственный правильный ответ, и, конечно, я слышал множество противоречивых мнений по этому вопросу, но, выбрав один из двух методов, о которых вы упомянули, я бы пошел с введением значений в JavaScript, потому что мне это проще.

Но так как вы попросили другие предложения, вы можете объединить две идеи: вместо мета-элементов ваш серверный код может просто вставить один <script> элемент в <head> хранить данные в переменной, к которой затем можно получить доступ непосредственно из любых других ваших сценариев (включая сценарии в нескольких исходных файлах). Вы можете поместить все свои данные в один объект, чтобы избежать множества глобальных переменных:

<html>
<head>
<script>
   var dataFromServer = { /* all your server data here */};
</script>
<script type="text/javascript" src="somelibrarycript.js"></script> 
<script type="text/javascript" src="someotherscript.js"></script>
<script>
   if (dataFromServer.someProperty) {
      // someProperty provided above so do something with it...
   }
</script>
</head>
etc...

Этот подход имеет дополнительное преимущество, заключающееся в том, что серверный код, по сути, просто создает JSON (который становится литералом объекта, если включен непосредственно в исходный код страницы), поэтому, если вы позже решите начать использовать Ajax, вы уже почти готовы к работе.

То, что вы предлагаете, совершенно нормально. Например, Джереми Ашкенас, создатель CoffeeScript, Underscore.js и Backbone.js, предлагает сделать то же самое в документах Backbone.

<script>
  Accounts.reset(<%= @accounts.to_json %>);
  Projects.reset(<%= @projects.to_json(:collaborators => true) %>);
</script>

Я просто хотел бы иметь в голове элемент, который объявляет глобальный объект с хорошим именем, содержащий вашу информацию. Что-то вроде:

<script type="text/javascript" >
    this.blah = this.blah || {};
    this.blah.userinfo = this.blah.userinfo || {};

    this.blah.userinfo = {
        "username" : "UserName42"
        "gender" : "Male"
    };
<script>

Две верхние строки просто инициализируют ваш глобальный объект. Поскольку он глобален, мы используем "бла" для пространства имен.

Я думаю, что вопрос немного запутанный, поскольку, по моему опыту, вы редко полагаетесь на статические / предварительно созданные HTML-страницы для сайтов, которые имеют учетные записи, привилегии пользователей и т. Д.

Обычно такой сайт / приложение опирается на какую-то технологию "серверных страниц" - ASP, JSP, PHP (или управляет всем этим с помощью запросов AJAX) - что позволит вам написать некоторый код тега / сервера, похожий на <%=request.getAttribute("userName")%> - что при компиляции / интерпретации сервером будет вводить для вас имя пользователя в том месте на вашей странице, которым вы его планируете.

Если по какой-то причине вы утверждаете, что это не так в вашем приложении, и вы предоставляете пользователям чистый предварительно созданный или статический HTML-код, тогда вам действительно придется выполнить одно из следующих действий:

1.AJAX-запрос, который извлекает имя пользователя

Я думаю, что ваш аргумент

это увеличит сложность без необходимости, а также количество просмотров страниц

не является действительным. Правильность использования технологии должна преобладать над (возможно, не существующим) приростом производительности. Я также не вижу в этом увеличения сложности, наоборот - вы можете разделить "пользовательскую" регистрацию частично на модуль и повторно использовать ее в другом месте.

2.Введите JavaScript (или используйте мета-теги)

и в этом я не совсем уверен, как бы вы это сделали и сохранили свою страницу после этого...

Другие вопросы по тегам