2015-08-03 3 views
0

Когда у меня есть переменная, определенная в контексте сервера, иногда мне нужно использовать ее в контексте javascript; например идентификатор сеанса.Как определить переменную сервера в контексте javascript?

Каков наилучший способ сделать это?

Я хочу отдельных файлов JavaScript и просматривать файлы (в моем случае jsp); на данный момент я нашел 2 способа:

) myVariables.js.jsp: создать файл JSP, который возвращает код JavaScript

myLib = { 
    sessionID: "${sessionId}", 
    [...] 
} 

и импортировать его как JavaScript в файл вида JSP:

<html> 
    <head> 
     <script src="myVariables.js.jsp"></script> 
     [...] 
    </head> 
<body> 
[...] 
</body> 
</html> 

Я могу получить идентификатор сеанса: myLib.sessionId.

Прос: удобный и быстрый.

Против: напишите файл jsp, который является js.

) Сохраните переменный сервер в скрытые поля ввода (например, в основной части шаблона):

<html> 
    <head> 
     <script src="myLib.js"></script> 
     [...] 
    </head> 
<body> 
<form id="myVariables"> 
    <input type="hidden" name="sessionId" value="${sessionId}" /> 
    [...] 
</form> 
[...] 
</body> 
</html> 

Я могу получить идентификатор сессии, пишущий определенную функцию в myLib.js библиотека:

myLib = { 
    sessionId: function() { 
     return $("form#myVariables > input[name=sessionId]").val(); 
    }, 
    [...] 
} 

Pros: JavaScript и просмотреть полностью разделены.

Против: больше кода для написания; немного сложнее понять, чем предыдущий.

+1

В моих глазах это «прежде всего вопрос, основанный на мнениях». Потому что оба пути имеют плюсы и минусы. Кстати, в прошлом я часто выбирал ваш второй путь, потому что он генерировал более чистый код (на моих глазах). – reporter

ответ

0

На мой взгляд, первый способ лучше, потому что ваши страницы будут чистыми и читабельными. Это очень важно! ;)

С наилучшими пожеланиями

0

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

<html> 
    <head> 
     <script> 
     var myLib = { 
      sessionID: "${sessionId}", 
      [...] 
     }; 
     </script> 
    </head> 
<body> 
[...] 
</body> 
</html> 

Нет отдельного JSP писать , Так же, как и второе решение в вашем вопросе, поскольку JavaScript привязан только к myLib, точно так же, как JavaScript в вашем втором решении привязан к структуре формы.

Существует преимущество для вашего первого решения, которое мы должны вызывать: он позволяет кэшировать HTML в браузере (путем разделения переменных на отдельный запрос, например, для .js.jsp). Объединение переменных с HTML (как указано выше, или второй подход в вашем вопросе) означает, что HTML должен обслуживаться с уменьшением или отключением кеширования.

Смежные вопросы