Ответ в виде готовой HTML страницы

Формировать ответ в виде полноценной HTML страницы в cmd.js трудоемко и чревато возможными ошибками при изоляции скобочек и кавычек. Объект http может выдать страницу целиком из файла функциями http.respFile() и http.respTmplFile(). Последняя функция перед выдачей страницы производит шаблонную обработку вставок, аналогично обрабоке PHP вставок. В отличие от PHP, JavaScript вставки вводятся <!--= JavaScript code --> и в необработанном виде воспринимаются браузером как комментарии.

Настроечный файл jCjS экспериментов с динамической страницей, обратите внимание, что используется инициализирующий скрипт из предыдущего раздела:

<?xml version="1.0" encoding="UTF-8"?>
<jCjS>
   <server
      port = "8080"
      serverPost = "dynamicPage"
   >
      <folders
         stat = "../stat/"
         stuff = "../stuff/"
      />
   </server>

   <post
      objectName = "dynamicPage"
   >
      <handlers
         init = "stuff@examples/helloWorld/init.js"
         cmd = "stuff@examples/dynamicPage/cmd.js"
      />
   </post>
</jCjS>

Детальное описание конфигурационного файла (см. раздел Конфигурация)

Командный скрипт так устроен, что при наличии аргумента counter выдает его текстовое текушее значение, при его отсутствии и при обращении по пути /, выдает HTML страницу целиком:

ans();

function ans() {
   if(http.argExist("counter")) {
      http.respPlainText(counter);
      return;
   }

   if(http.argCnt == 0) {
      http.respFile("stuff@examples/dynamicPage/tmp.html");
      return;
   }

   http.respError(404);
}

Шаблон html страницы использует библиотеку jQuery:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<script language="javascript" type="text/javascript" src="/jsl/jquery.min.js"></script>
<script language="javascript" type="text/javascript">

function requestCounter() {
   $.get("?counter", ansCounter).error(ansError);
}
function ansCounter(ans) {
   $('#counter').html(ans);
   setTimeout(requestCounter, 1000);
}
function ansError(ans) {
   $('#counter').html('?');
   setTimeout(requestCounter, 5000);
}
$(requestCounter);

</script>

<title>Шаблон динамической страницы поста</title>
</head>

<body>
Значение счетчика поста <!--= post.objectName --> = <span id='counter'></span>

</body>
</html>

Ответ в виде шаблонной HTML страницы

В тех случаях, когда статичное содержимое HTML страницы использует данные, содержащиеся в контексте конкретного интерпретатора JavaScript удобно воспользоваться шаблонной обработкой страницы. Покажем это на примере, на предыдущей странице в строке 28 имеется такой несколько необычный комментарий <!--= post.objectName --> Если в Листинг 2 строку 10 заменить на http.respTmplFile("stuff@examples/dynamicPage/tmp.html");, то вид динамической страницы будет содержать имя поста. Все, что заключено в таких комментариях, jCjS прежде чем отдать страницу, заменяет результатом их выполнения JavaScript машины. Такой прием во многих случаях может оказаться очень удобным.