`
mywebcode
  • 浏览: 1001541 次
文章分类
社区版块
存档分类
最新评论

ajax提交等待服务器响应友好提示信息的实现

 
阅读更多

众所周知,在客户端向服务器发送AJAX请求时,会有一个等待服务器响应的过程,在网络环境好而且服务器负荷小的时候,业务逻辑不大太复杂的请求可能一下子就处理完并返回响应结果了,但当网络环境不理想或请求涉及到大量的运算时,服务器响应的时间或许就会比较漫长了,特别对于正在操作,正期待操作结果的用户来说,这段等待时候是无比的漫长,如果你没有过这样的操作体验,你回想一下约会时别人迟到的时候或有急事出门时在公交站苦苦等车的滋味,相信你就能感同身受了,而让用户忍受如此煎熬,对于强调用户体验的Web2.0时代,是大忌,是追求“为用户创造价值,让用户享受电子商务所带来的方便快捷”为宗旨的我所不能接受的。虽然,我不能改变客观环境因素带来的长响应时间,但我可以告诉用户系统正在做什么,让他们感受到,系统很在乎他们的感受,并愿意亲切地和他们交流的,而不是传统的软件那样,死板、霸道、冷冰冰的,好了,不多说大道理了,看看我的做法吧。

首先声明,我现在正在介绍的并不是一个多么强大,多么了不起,技术含量多么高、能领先人类文明多少年的做法,其实这种做法,在咸丰年代开始就有了,不过,那是别人的事,下面介绍的,是我自己一个字母一个字母敲的,旨在交流与分享,也为了整理一下自己的思路,好了,正式开始:

这是登录表单的html代码,没什么特别的,我的目的是为了大家在读下面的JS代码时能够更加容易理解而已。可以看到,表单中的提交按钮,并非一个传统意义上的<input type="submit"/>的标签,而是一个<a></a>,为什么用a?我觉得用a控制起样式比较简单,最重要是它的hover属性能够兼容各浏览器,这样的话我想做点炫一点的效果简单很多而不用又去写些HACK来兼容该死的IE6们。不过事实上,在上面的代码中没看到这个a是怎样与提交登录请求关联起来的。不用着急,马上送上:

那么loginSubmit方法又做了什么事情呢?来看看代码先:

这个方法其实是用来做提交验证登录信息请求前的一些处理的,比如空值的判断等等,可能你们看了方法的第一行关于loginConfig.isLoadingData这个判断会比较疑惑,先介绍一下这个变量吧,loginConfig是一个登录信息配置的对象字面量,而其中的isLoadingData是标记当前是否在加载数据的,为true时,表示已经发送了AJAX请求,但还没有得到服务器的回应,为false时,表示当前没有正在等待响应的请求。这个机制是为了防止用户不断点击登录按钮而导致客户端在还没得到服务器的请求的情况下不断地发送AJAX请求,造成无论是客户端还是服务器都产生无谓的负荷而设的。

在继续向下的代码中,有个叫quickTips的方法,这个方法用于显示一些快速提示,如quickTips表示在id为userName的输入框附近提示用户输入用户名,这里不多介绍了,在一些常规的检测完毕后,执行loginWaiting方法,这个方法是本篇博客的关键,也就是开始向用户显示友好的登录信息的,在此之后,马上执行checkLogin方法,向服务器提交登录验证请求,本来,这两个动作应该是严格意义上的同时执行的,但JAVASCRIPT是单线程的,所以,唯有偏心一下了,呵呵,来看看loginWaiting方法做了什么吧:

首先,将登录按钮的disabled属性设成true,这句代码的本意是将这个按钮设成不可用状态,但事实上,这样做,在很多浏览器上是无效的,所以只是个掩耳盗铃的做法,真正要达到这样的目的,还是靠下面的代码来实现。第二句代码,实现的是改变登录按钮的背景图片铺设的方向,之前是从左到右,现在是从右到左,我在做什么?看一下这幅图片到底是怎样的就清楚了*—*,on,god,CSDN blog原来是不支持上传图片的,所以没法展示这张图片给你们看了,其实只是一种很常见的做法,也就是将一张图片的原图放在左侧,右侧则放一张图片相应的灰度图(也就是当这个按钮不可用的状态时给按钮安排的背景图片),这样子把两张图片合成为一张有什么好处呢?一个是可以服务器的压力,因为一张图片意味着浏览器只需向服务器发一次请求,而两张就意味着两次。第二点,也就是最关键的地方在于,浏览器并不是一次性将所有页面用到的图片加载回来的,而是展示哪张时加载哪张,如果分开两张图片的话,当我们在切换按钮背景图片的时候,浏览器加载稍慢的话,会导致这个切换的过程中,按钮的背景是空白的,这是任何人都不想见到的结果,而我们之前是将其做成一张图片的话,只需要将加载好的图片向左或向右滑动一下就可以了,方便快捷、老少咸宜^_^,你说呢?

从表单的html可以看得到,在登录按钮的右侧有一个取回密码的链接,在等待登录响应过程中,这个链接的存在是没什么必要的,甚至在看起来是有点多余的,所以我决定将其替换成友好的等待信息,$("#forgetPwd").html(waitingText);这句代码做的就是这件事,这样,感觉上,也差不多了,但老感觉还缺点什么,到底是缺什么呢?对了,缺一点生气,这时候,想起来在其它WEB站点或软件中,在后台运算时,通常会有动态的类似省略号的点在不停地跳动,有点像进度条的效果,感觉挺好的,所以我也决定做一个这样的效果,使提示更加友好,也跟得上潮流,呵呵,想了一下,感觉上这样的效果用定时执行会比较好,那就setInterval吧,下面的代码就不多作解释咯,记着在loginComplete后clearInterval就好了。

分享到:
评论

相关推荐

    ajax 实现等待页面

    当用户查询数据,如果系统反应过慢,呈现出友好进程等待页面,进程结束后画面自动消失。

    ajax提交表单到后台

    利用jquery的ajax提交表单数据到后台。后台使用spring.

    Ajax提交数据更新服务器内容

    Ajax提交数据更新服务器内容

    Ajax异步请求响应.java

    responseText/responseXML :服务器的响应字符串 status:服务器返回的HTTP状态码 statusText: 服务器返回的HTTP状态信息 readyState :对象状态(0-4) 0 = 未初始化 1 = 正在加载 2 = 已加载 3 = 交互...

    ajax 无刷新实现表单提交

    简单的ajaxt无刷新实现表单提交的实例(myeclipse 直接导入运行) 学习点: 1;ajax无刷新表单提交 2;ajax的运行历程 最简单明了的实例,清晰的帮你弄清上述概念,运行简单,只需解压该包,然后Myeclipse中file - ...

    ajax来根据服务器的速度来实现滚动条

    ajax来根据服务器的速度来实现滚动条,在实现文件上传时可以动态的根据服务器实现文件上传的滚动条提示

    jq ajax提交表单

    完整的jq ajax提交表单,奖解压后jq文档加入页面中,调用就可惟了。 表单结构 &lt;form id="myForm" action="comment.php" method="post"&gt; Name: &lt;input type="text" name="name" /&gt; Comment: &lt;...

    ajax实现提交时校验表单方法

    本文实例为大家分享了ajax提交时校验表单的方法,供大家参考,具体内容如下 方法一: 代码示例:  巧妙设计之处:ajax提交的话,不能够进行校验拦截,设置一个flag来判断,很巧妙的设计之处,故收藏! function ...

    Asp+ajax提交表单实例

    Asp+ajax提交表单实例,很好用的啊.

    js ajax 提交checkbox

    js ajax 提交checkbox 根据checkbox的值和是否被checked将所有checkbox的选项提取出来并合并成一个字符串提交服务器端,服务器端根据间隔符将所有选项值分开然后处理。示例为选择ip地址的形式。

    利用ajax提交表单完整流程

    利用ajax提交表单完整流程

    ajax提交表单小例子

    ajax提交表单,并对提交中文时的乱码进行处理.

    vue12ajax提交表单

    vue1/2 ajax提交表单

    AJAX实现页面等待效果

    用AJAX+Struts2+Mysql实现的页面等待效果。

    AJAX+ASP实现输入框提示

    用ajax实现的asp页输入框提示,比较经典,也比较简单实用。

    ajax 提交小例子.带表单验证和遮罩等待效果

    这是业余时间写的一个小例子 可以实现ajax提交 juqery validate插件表单验证 blockUI遮罩等待效果 可以学习使用

    用Ajax实现提交数据库数据的探讨

    AJAX技术在创建和使用B/S应用时,可以通过HttpRequest后台通道向数据库提交数据。文章对使用Ajax、JSP(J2EE)、JavaScript、CSS和XML标记的混合运用进行归纳总结,得出一个典型的Ajax提交数据过程,主要内容包括...

    提高AJAX客户端响应速度

    提高AJAX客户端响应速度,AJAX技术,编程技巧

    ajax提交中文到servlet

    该案例是一个ajax异步提交中文字符串的案例。该案例是一个ajax异步提交中文字符串的案例。该案例是一个ajax异步提交中文字符串的案例。

    ajax提交form表单和上传图片

    jquery.js + jquery-form.js + springMVC实现ajax提交form表单和上传图片,上传图片成功js可以获取图片保存相对路径。

Global site tag (gtag.js) - Google Analytics