在这种情况下使用异步请求是否是一种好的做法
Is it a good practice to use asynchronous requests in this scenario?
我有一个场景,我在JSP页面中有一个按钮发送电子邮件,请求使用jQuery Ajax和JSON异步发送到servlet,servlet在DB中搜索,如果用户有电子邮件,它会返回电子邮件地址并向其发送电子邮件,然后转发到结果页面,成功或发送电子邮件失败, 但是,如果用户没有电子邮件,它会使用 JSON 向 JSP 返回 false 值,然后向用户显示一个 JSP 表单以输入他的电子邮件。
使用 Ajax 是否是一种好习惯,我知道并非每次都向用户返回值或使用 get 方法向 servlet 发送请求,该方法在用户没有电子邮件的情况下返回参数?
使用ajax在几乎所有情况下都对用户体验非常好。使用ajax,用户将体验到即时反馈,而无需面对烦人的"内容闪光"或(部分)空白页面,因为整个HTML响应需要首先由服务器生成/缓冲。这确实是使用 JS/ajax 的一大优势。
使用JSON通常比XML,HTML甚至纯文本更有利。但是,对于客户端和服务器之间的 ajax 数据交换格式,没有"最佳实践"。只需选择最适合要求的内容即可。JSON 非常适合这种情况。jQuery开箱即用地理解它,在Java中,你可以选择大量易于使用的JSON解析器。
但是,在开发支持 ajax 的 Web 应用程序时,您确实需要考虑当客户端禁用 JS 时核心功能不会中断。这被称为Unobusive JavaScript。大多数搜索机器人,移动浏览器和基于文本的浏览器不使用JS。您应该尝试仅将 JS 用于渐进式增强功能。要自己测试这一点,在 Firefox 中,您可以使用例如 Web 开发人员工具栏来轻松启用/禁用 JS 支持。在禁用JS的情况下运行您的网站,并观察核心功能是否也得到维护。
实现这一点的最好方法是开始开发网站,没有任何一行JS代码,即使HTML元素上没有一个onclick
,onsubmit
,onwhatever
属性。一旦你让核心功能工作,那么你就可以开始添加 JS 在一个脚本的风格中,该脚本在文档准备期间执行并将函数附加到感兴趣的 HTML 元素(即使在这里,你也不应该更改原始的 HTML 代码!让 JS 函数在同一个 URL 上触发 ajax 请求,或者在不同的 URL 上触发 ajax 请求,具体取决于要求。您可以在 Servlet 中区分 ajax 和普通请求,如下所示:
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
// Handle ajax request. Return JSON response here.
} else {
// Handle normal request. Return normal HTML response here (by JSP).
}
另请参阅:
- JSP 中的简单计算器 - 包含不显眼的 JSP/Servlet/jQuery 示例
Json 只是一种数据交换格式。是否使用 Json 与是否使用异步通信无关......您可以使用 Json(或 XML,或序列化对象,没关系)执行这两种通信类型。
现在,在您的问题中,看起来您只想使用异步通信来改善用户体验(它不会轻弹用户的浏览器)。如果是这种情况,异步通信就是要走的路!
我认为你不需要在这里使用AJAX。ajax 的主要思想是在没有回发的情况下呈现服务器响应,在您的情况下,您在获得某种结果后重定向页面。
在我看来,你应该选择这两种方式。
1) 使用 AJAX,将数据发送到 servlet,然后呈现来自服务器的响应,无论邮件是否发送。
2) 将您的表单提交到 servlet 并发送电子邮件,然后重定向到 jsp 并显示成功/失败结果。
希望对您有所帮助。
- 如何解决这种情况下的非法调用类型错误
- 为什么在这种情况下,“This”确实充当javascript函数中的私有成员
- 在这种情况下,如何正确对齐显示
- 为什么jQuery悬停方法在这种情况下不起作用
- 在这种情况下,如何获取选定的表tr行
- 如何使多个工作在这种情况下
- 在这种情况下如何使用闭包
- 为什么在这种情况下要向JQuery添加两个链接
- 为什么"构造函数是一种特殊情况;
- 为什么push方法没有'在这种情况下不起作用:[].推
- 在这种情况下,*[Symbol.iterator]的含义是什么
- 在这种情况下,调用阻止默认值
- 如何停止两个按钮执行相同的工作?在这种情况下,它们都会滚动到顶部
- 在这种情况下使用onclick事件处理程序可以接受吗
- 如何避免在这种情况下修改事件对象
- 在这种情况下,如何将字符串添加到函数中 php
- 在这种情况下,“foo[x]”是什么意思?
- 在这种情况下,我如何在jquery中实现限制字符
- 在这种情况下,我应该如何在余烬中放置我的模型有很多关系
- 在这种情况下使用异步请求是否是一种好的做法