Ajax之旅(三)-- 异步更新

上篇博文中,已经为大家在理论上讲述了什么是XMLHttpRequest对象,它是Ajax实现异步更新的核心对象。下面,我们就通过一个实例,来了解XMLHTTPRequest对象的使用或者说异步更新的实现

实例:判断用户代码是否重复

       方案一:同步更新。原理如下图所示:

从上图中可以看到,当我们在浏览器用户代码输入框中输入“用户代码”后,只能等待服务器的响应,当服务器将结果反馈给浏览器后,我们才可以进行下一个操作,也就是继续输入“用户名称”。

这就是同步更新,这样必然会给用户带来几秒钟的等待时间,也许一个输入框显不出什么,如果每次输入点东西,就要等待几秒,哪怕一秒,还会有用户愿意继续使用我们的网站吗?所以,异步跟新出来了。

方案二:异步更新,原理如下图所示:

从上图可以看出和同步更新的明显不同。在异步更新中,我们使用了Ajax引擎,从图中看起来,也就好像是,在浏览器和服务器中间加入了中间层(Ajax引擎)

这样,当我们输入完“用户代码”后,浏览器将请求发送给Ajax引擎,然后就可以继续输入“用户名称”了,不再需要等待。而Ajax引擎则再将请求发送给服务器。当服务器操作完成后,将结果返回给Ajax引擎,Ajax引擎再返回给浏览器,进而显示。简言之,浏览器只需要把请求发送给Ajax即可,然后该干什么还干什么;当Ajax引擎有更新时,利用回调函数返回给浏览器。这就是异步更新。

通过方案一,我们也很明显的知道了方案二的优势,那么究竟在代码中如何实现呢,下面是我针对上述实例---判断用户代码是否重复 的一些代码实现,仅供大家参考。当然,也利用这些实现,来让读者朋友们,对XMLHttpRequest对象的使用,有所深入了解。

第一步:创建Ajax核心对象XMLHttpRequest。

这里,我们需要针对不同的浏览器做不同的实例化结果。

<span style="font-size:18px;"> var xmlHttp;
     function createXMLHttpRequest(){
         //表示当前浏览器不是ie
         if(window.XMLHttpRequest){
              xmlHttp= newXMLHttpRequest();
         } else if (window.ActiveXObject){
              xmlHttp= newActiveXObject("Microsoft.XMLHTTP");
         }
     }</span>

第二步:注册回调函数。

回调函数,是XMLHttpRequest对象实现异步更新的核心方法。发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态,XMLHttpRequest对象提供了onreadyStateChange事件实现这一功能,也就是我们常说的回调函数。

再通俗一点说:回调,不是你主动调的,是由服务器来调的(在这里是Ajax引擎调的。)

<span style="font-size:18px;"><span style="font-size:14px;">//注册回调函数
xmlHttp.onreadystatechange= callback;</span></span>

此处,需要注意一点:

<span style="font-size:18px;">xmlHttp.onreadystatechange = callback(); //代表方法调用
xmlHttp.onreadystatechange = callback;   //代表把方法的地址传过去</span>

第三步:设置和服务器端的交互方式及相应参数。

就是我们常说的是get提交还是post提交,根据不同的提交方式,代码实现也不尽相同,下面给出的实现是get提交的代码。此处还有一个参数,xmlHttp.open("GET",
url, true)中,true代表是异步提交,false则代表同步提交,所以,想要实现异步更新,此处参数还需设置为true

<span style="font-size:18px;">        //第三步:设置和服务器端的交互方式及相应参数
        varurl= "user_validate.jsp?userId=" + trim(filed.value)+"&time=" + new Date().getTime()             </span>
<span style="font-size:18px;">        xmlHttp.open("GET", url, true);</span>

第四步:向服务器端发送数据。

上述设置均完成后,我们只需要向服务器端发送数据即可。

<span style="font-size:18px;">         //第四步:向服务器端发送数据
         xmlHttp.send(null);
         } else {
              document.getElementById("spanUserId").innerHTML = "";
         }
     </span>

第五步:利用callback函数,来判断与服务器端的交互是否完成,响应是否正确,并根据需要服务器端返回的数据,更新页面内容。

<span style="font-size:18px;">//第五步:判断与服务器端的交互是否完成
     functioncallback(){
         if (xmlHttp.readyState== 4) {
              if (xmlHttp.status ==200) {
                   if (trim(xmlHttp.responseText)!= "") {
                       //alert(xmlHttp.responseText);
                       document.getElementById("spanUserId").innerHTML = "<fontcolor='red'>"
                                + xmlHttp.responseText + "</font>"
                   }else{
                       document.getElementById("spanUserId").innerHTML = "";
                   }
              } else {
                   alert("请求失败。错误码为:" + xmlHttp.status);
              }
         }
     }</span>

这里需要注意:

<span style="font-size:18px;">ajax.readyState== 4  //只要有响应就返回。不管正确与否; Ajax引擎状态为成功
ajax.status ==200 //HTTP协议状态为成功</span>

五步下来,我们判断用户代码是否重复的异步更新也就实现啦,不知道你对Ajax,对XMLHttpRequest对象,对异步更新又了解了多少了?

Ajax之旅(三)-- 异步更新

时间: 2024-10-12 01:54:06

Ajax之旅(三)-- 异步更新的相关文章

使用Ajax选取ListBox的值异步更新视图,并作为表单值提交

一.控制器返回一个ViewBag MultiSelecList值. public ActionResult Create() { ViewBag.ReviewIndexItems = new MultiSelectList(db.ReviewIndexItems.OrderBy(item => item.ReviewIndexItemNumber).ToList(), "ReviewIndexItemID","ReviewIndexItemName"); re

Ajax之旅(二)--XMLHttpRequest

上文中提到的Ajax的异步更新,主要使用XMLHttpRequest对象来实现的,XMLHttpRequest对象可以在不向服务器提交整个页面的情况下,实现局部更新网页.当页面全部加载完毕后,客户端通过该对象向服务器请求数据,服务器端接受数据并处理后,向客户端反馈数据. 关于XMLHttpRequest对象方法和属性如下(聊一眼即可,不是本文重点): <html> <head> <title>XMLHTTPRequest对象的说明DEMO</title> &

框架基础:关于ajax设计方案(三)---集成ajax上传技术

之前发布了ajax的通用解决方案,核心的ajax发布请求,以及集成了轮询.这次去外国网站逛逛,然后发现了ajax level2的上传文件,所以就有了把ajax的上传文件集成进去的想法,ajax方案的level2的改进就不介绍了,不清楚的可到前几篇博客去看看.我们直接切入主题. 概念介绍: 1. js的FormData:js中在新的版本中已经支持了FormData对象,可以初始化一个空的form,或者初始化已经存在的form,浏览器测试代码. 2. 浏览器的支持:浏览器已支持input=file的

框架基础:ajax设计方案(三)---集成ajax上传技术

之前发布了ajax的通用解决方案,核心的ajax发布请求,以及集成了轮询.这次去外国网站逛逛,然后发现了ajax level2的上传文件,所以就有了把ajax的上传文件集成进去的想法,ajax方案的level2的改进就不介绍了,不清楚的可到前几篇博客去看看.我们直接切入主题. 概念介绍: 1. js的FormData:js中在新的版本中已经支持了FormData对象,可以初始化一个空的form,或者初始化已经存在的form,浏览器测试代码. 2. 浏览器的支持:浏览器已支持input=file的

ASP.NET之Ajax系列(三)

我们通过前两篇文章的学习,已经大致掌握了Ajax的实现方法,同时也可以对比出两种方式的优劣.但是我们还是没有搞清楚真正的ajax的实现原理,以及最原始的,未经过封装的ajax是什么样的,今天我们一起来探索这些之前不了解的地方. 首先在上一篇也提到过,Ajax是异步的Javascript和XML,那么聪明的你应该已经猜到,js脚本是必不可少的.我们在这里先引入一个浏览器对象:XMLHttpRequest,可能大家对这个对象比较陌生,那么我们就先从它的属性开始了解.它主要有三个属性:onreadys

后勤模块数据源的增量队列(Delta-Queue)三种更新模式(Update Mode)

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4296684.html 数据的更新(同步)有三种方式:V1.V2.V3: V1 - Synchronous update,同步更新,数据会立即更新到目的地(如应用数据表Application Tables.增强队列Delta-Queue),数

Ajax之旅(一)--什么是Ajax

本来在学习DRP,但是无意中发现所附资料中有一些參考书籍,当中就有一个关于Ajax的,看了看,挺好的,于是决定暂停一下DRP,再次学习一下Ajax.记得第一遍学习Ajax的时候认为真的是一团雾水,看了一遍视频,留下的预计也就仅仅剩下一团雾水了. 只是这都无所谓,用米老师的一句话说:这都非常正常.由于第一遍的"不懂",才有了第二遍的"可能懂".所以,这篇系列博客就这样生成了~希望也会对您有所帮助. 单说Ajax,好像非常高深的样子,并且看看百度百科的定义吧:    

iOS网络编程(三) 异步加载及缓存图片----&gt;SDWebImage

@SDWebImage提供一个UIImageView的类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. @SDWebImage的导入1.https://github.com/rs/SDWebImage 下载SDWebImage开源包2.将类包拖入工程,再导入MapKit.framework.ImageIO.framework两个框架3.SDWebImage是支持ARC的,在MRC的工程中要注意,可参考MRC工程配置ARC4.注意:SDWebImag

Ajax学习笔记(三)

三.jQuery库详解 1.使用jQuery之后,javascript操作的不再是HTML元素对应的DOM对象,而是包装DOM对象的jQuery对象.js通过调用jQuery对象的方法来改变它所包装的DOM对象的属性,从而实现动态更新HTML页面. 由此可见,使用jQuery动态更新HTML页面只需以下两个步骤: (1)获取jQuery对象.jQuery对象通常是DOM对象的包装 (2)调用jQuery对象的方法来改变自身.当jQuery对象被改变时,jQuery包装的DOM对象随之改变,HTM