在这种情况下使用异步请求是否是一种好的做法

Is it a good practice to use asynchronous requests in this scenario?

本文关键字:一种 这种情况下 异步 是否是 请求      更新时间:2023-09-26

我有一个场景,我在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元素上没有一个onclickonsubmitonwhatever属性。一旦你让核心功能工作,那么你就可以开始添加 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 并显示成功/失败结果。

希望对您有所帮助。