Как отправить значение с моим HTML, которое доступно из Javascript? - PullRequest
0 голосов
/ 31 октября 2011

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

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

var x={{username}};

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

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

Ответы [ 4 ]

1 голос
/ 31 октября 2011

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

Я не думаю, что есть единственный правильный ответ, и, конечно, я слышал много противоречивых мнений по этому вопросу, но, выбрав один из двух методов, которые вы упомянули, я бы пошел, чтобы ввести значения в 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, вы уже будете почти есть.

1 голос
/ 31 октября 2011

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

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

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

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

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

, который излишне увеличил бы сложность, а также количество посещений страницы

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

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

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

1 голос
/ 31 октября 2011

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

<script>
  Accounts.reset(<%= @accounts.to_json %>);
  Projects.reset(<%= @projects.to_json(:collaborators => true) %>);
</script>
1 голос
/ 31 октября 2011

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

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

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

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

...