Как легко переключаться между веб-сайтом на основе ajax и базовым HTML-сайтом?

У меня есть веб-сайт (на основе JSP/Servlets, с использованием шаблона MVC), и я хочу поддерживать веб-сайт на основе AJAX и базовый веб-сайт на основе HTML. посетители веб-сайта должны иметь возможность изменять режим серфинга от Ajax до базового HTML и наоборот - как это применимо в Google-почте.

Вопросы:

  • Как лучше всего достичь этой цели?
  • Должен ли я создать два представления для каждой страницы?

Я использую JQuery и JSON в результате этого .

Ответ 1

Вам нужно ненавязчивый Javascript, который является частью Progressive Enhancement.

Сначала начните создание полностью функционального веб-приложения без какой-либо строки Javascript. После того, как вы его заработаете, начните писать Javascript-код, который "берет на себя" необработанную HTML-работу, не меняя ни одной строки HTML/CSS. В коде на стороне сервера вам необходимо добавить логику, которая распознает, был ли запрос запущен JavaScript или нет, и ответ соответственно. Вы можете проверить оба случая, включив/отключив JavaScript в веб-браузере. В Firefox легко с панель инструментов веб-разработчиков.

Например, у вас есть список писем со всеми HTML-ссылками, которые должны показывать тело письма:

<a href="mail/show/1" class="show">Message title</a>

Без JavaScript это приведет к вызову HTTP-запроса сервлету, который загружает почту, идентифицированную с помощью 1, пересылает запрос JSP, который скрывает список сообщений в представлении и показывает почту в представлении.

С JavaScript/jQuery вам нужно написать код, который делает то же самое с помощью Ajax, например:

$('a.show').click(function() {
    $.getJSON(this.href, callbackFunctionWhichHidesListAndShowsMail);
    return false;
});

На стороне сервера вы должны различать обычные запросы и запросы ajax, чтобы вы могли соответственно возвращать ответ.

boolean ajax = "XMLHttpRequest".equals(request.getHeader("x-requested-with"));

// ...

if (ajax) {
    writeJson(response, mail);
} else {
    request.setAttribute("mail", mail);
    request.getRequestDispatcher("/WEB-INF/mail.jsp").forward(request, response);
}

Наконец, чтобы дать пользователю возможность переключаться между режимами вручную, вы должны установить cookie или предпочтительно (поскольку файлы cookie отключены) передайте некоторую информацию в URL (параметр pathinfo или request), что заставляет сервер отключать излучение линии <script>.

Ответ 2

Подумайте о версии html в качестве основы. Постройте это первым.

Затем наложите дополнительную функцию ajax как дополнительный слой поверх этого, перехватив по умолчанию поведение html по мере необходимости. Нет необходимости в двух представлениях, просто одно представление, которое постепенно добавляет расширенные функциональные возможности в зависимости от доступных технологий и/или предпочтений пользователя.

Ответ 3

Вы довольно разумно пытаетесь Progressive Enhancement. Здесь есть отличная статья Список: понимание прогрессивного улучшения, на который я должен отдать должное этому SO-ответу; Изящная деградация, когда следует рассмотреть. Я считаю, что Graceful Degredation является более негативным способом рассмотрения проблемы поддержки различных возможностей браузера; В чем разница между прогрессивным улучшением и грациозным деградации?