您需要Unobtrusive JavaScript,它是progressive enhancement 的一部分。
首先,开始创建一个功能齐全的网络应用程序没有任何 JavaScript 行。一旦你让它工作,然后开始编写 JavaScript 代码“接管”原始 HTML 工作 不更改任何 HTML/CSS 行。在服务器端代码中,您需要 add 逻辑来识别请求是否已被 JavaScript 触发并相应地返回响应。您可以通过在 Web 浏览器中启用/禁用 JavaScript 来测试这两种情况。在 Firefox 中,使用 Web Developer Toolbar 很容易。
例如,您有一个包含所有 HTML 链接的邮件列表,这些链接应显示邮件正文:
<a href="mail/show/1" class="show">Message title</a>
如果没有 JavaScript,这将向 servlet 发出 HTTP 请求,该 servlet 加载由 1 标识的邮件,将请求转发给 JSP,该 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 中传递一些信息(路径信息或请求参数),这会强制服务器禁用发射<script> 行。