在这种情况下使用异步请求是一种好习惯吗?

时间:2011-05-10 15:39:20

标签: java javascript jquery jsp servlets

我有一个场景,我在JSP页面中有一个发送电子邮件的按钮,请求使用jQuery Ajax和JSON发送到servlet 异步,在DB中搜索servlet,如果用户有电子邮件,它返回电子邮件地址并向其发送电子邮件,然后成功或无法发送电子邮件转发到结果页面,但在用户没有电子邮件的情况下,它使用JSON返回错误值JSP然后一个JSP表单出现给用户输入他的电子邮件。

使用Ajax是不错的做法,我知道每次都没有给用户返回值使用get 方法向servlet发送请求,返回参数在用户没有电子邮件的情况下?

3 个答案:

答案 0 :(得分:3)

使用ajax几乎在所有情况下都非常适合User Experience。使用ajax,用户将体验即时反馈而无需面对恼人的“内容闪存”或(部分)空白页面,因为整个HTML响应需要首先由服务器生成/缓冲。这真的是使用JS / ajax的一大优势。

使用JSON通常优于XML,HTML甚至纯文本。但是对于客户端和服务器之间的ajax数据交换格式没有“最佳实践”。只需挑选最适合要求的东西。对于这种情况,JSON非常好。 jQuery理解它是开箱即用的,在Java中你可以选择多种易于使用的JSON解析器。

但是,在开发支持Ajax的Web应用程序时,您确实需要考虑当客户端具有JS 禁用时,核心功能中断。这称为Unobtrusive JavaScript。大多数搜索机器人,移动浏览器和基于文本的浏览器都不使用JS。您应该尝试仅为Progressive Enhancements使用JS。要自己测试一下,在Firefox中你可以使用Web Developer Toolbar来轻松启用/禁用JS支持。在禁用JS的情况下运行您的网站,并观察核心功能是否也得到维护。

实现这一目标的最佳方法是在没有任何单行JS代码的情况下开始开发网站,即使HTML元素上没有单个onclickonsubmitonwhatever属性。一旦你获得了核心功能,你就可以开始在脚本的味道中添加JS,它在文档就绪期间执行,并将功能附加到感兴趣的HTML元素上(即使在这里,你应该更改原始的HTML代码!)。让JS函数根据需要在同一个URL或可能不同的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).
}

另见:

答案 1 :(得分:1)

Json只是一种数据交换格式。是否使用Json与使用异步通信无关...您可以使用Json(或XML或序列化对象,无关紧要)来执行这两种通信类型。

现在,在您的问题中,您似乎只想使用异步通信来改善用户体验(它不会轻弹用户的浏览器)。如果是这种情况,可以采用异步通信方式!

答案 2 :(得分:0)

我认为你不需要在这里使用AJAX。 ajax的主要思想是在没有回发的情况下呈现服务器响应,在您获得某种结果后,您将重定向页面。

在我看来,你应该选择这两种方式。

1)使用AJAX,将数据发送到servlet,然后从服务器呈现响应是否发送邮件。

2)将您的表单提交给servlet并发送电子邮件,然后使用成功/失败结果重定向到jsp。

希望它有所帮助。