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