ajax和XMLHTTP原理

ajax|xml

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。 XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。 所以我们先从XMLHttpRequest讲起,来看看它的工作原理。 首先,我们先来看看XMLHttpRequest这个对象的属性。 它的属性有: onreadystatechange 每次状态改变所触发事件的事件处理程序。 responseText     从服务器进程返回数据的字符串形式。 responseXML    从服务器进程返回的DOM兼容的文档数据对象。 status           从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪) status Text       伴随状态码的字符串信息 readyState       对象状态值0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)1 (初始化) 对象已建立,尚未调用send方法2 (发送数据) send方法已调用,但是当前的状态及http头未知3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,4 (完成) 数据接收完毕,此时可以通过通过responseXml和responseText获取完整的回应数据  但是,由于各浏览器之间存在差异,所以创建一个XMLHttpRequest对象可能需要不同的方法。这个差异主要体现在IE和其它浏览器之间。下面是一个比较标准的创建XMLHttpRequest对象的方法。   function CreateXmlHttp()   {      //非IE浏览器创建XmlHttpRequest对象    if(window.XmlHttpRequest)    {     xmlhttp=new XmlHttpRequest();    }    //IE浏览器创建XmlHttpRequest对象     if(window.ActiveXObject)    {    try    {     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");         }    catch(e)    {    try{     xmlhttp=new ActiveXObject("msxml2.XMLHTTP");     }     catch(ex){}    }    }   } function Ustbwuyi()   {    var data=document.getElementById("username").value;           CreateXmlHttp();        if(!xmlhttp)        {         alert("创建xmlhttp对象异常!");         return false;        }               xmlhttp.open("POST",url,false);        xmlhttp.onreadystatechange=function()        {            if(xmlhttp.readyState==4)           {           document.getElementById("user1").innerHTML="数据正在加载...";             if(xmlhttp.status==200)             {              document.write(xmlhttp.responseText);             }                 }          }        xmlhttp.send();       }如上所示,函数首先检查XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问请求状态,如果一切已经就绪(status=200),那么就执行下面需要的操作。对于XmlHttpRequest的两个方法,open和send,其中open方法指定了:a、向服务器提交数据的类型,即post还是get。b、请求的url地址和传递的参数。c、传输方式,false为同步,true为异步。默认为true。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。我们需要根据实际需要来指定同步方式,在某些页面中,可能会发出多个请求,甚至是有组织有计划有队形大规模的高强度的request,而后一个是会覆盖前一个的,这个时候当然要指定同步方式。    Send方法用来发送请求。  知道了XMLHttpRequest的工作流程,我们可以看出,XMLHttpRequest是完全用来向服务器发出一个请求的,它的作用也局限于此,但它的作用是整个ajax实现的关键,因为ajax无非是两个过程,发出请求和响应请求。并且它完全是一种客户端的技术。而XMLHttpRequest正是处理了服务器端和客户端通信的问题所以才会如此的重要。 现在,我们对ajax的原理大概可以有一个了解了。我们可以把服务器端看成一个数据接口,它返回的是一个纯文本流,当然,这个文本流可以是XML格式,可以是Html,可以是Javascript代码,也可以只是一个字符串。这时候,XMLHttpRequest向服务器端请求这个页面,服务器端将文本的结果写入页面,这和普通的web开发流程是一样的,不同的是,客户端在异步获取这个结果后,不是直接显示在页面,而是先由javascript来处理,然后再显示在页面。至于现在流行的很多ajax控件,比如magicajax等,可以返回DataSet等其它数据类型,只是将这个过程封装了的结果,本质上他们并没有什么太大的区别。

时间: 2024-12-21 09:31:33

ajax和XMLHTTP原理的相关文章

Ajax框架及原理分析--视频

Ajax框架及原理分析 下载地址:http://v.51work6.com/courseInfoRedirect.do?action=courseInfo&courseId=240576 AJAX技术是目前流行的Web技术,它可以帮助我们构建无刷新的Web系统,我们的AJAX课程是基于JavaEE的.首先介绍了AJAX基本原理,为什么要使用AJAX,然后是介绍了AJAX框架.其中DRW是JavaEE特有的AJAX框架.XML技术.XHTML介绍.JavaScript语言和CSS技术是学习AJAX

网页-关于调用jQuery ajax交互的原理问题

问题描述 关于调用jQuery ajax交互的原理问题 比如这样的代码 $.ajax({ 'url': '/chk_user.php', 'type': 'get', 'data': { 'ajax': 'checkuser', 'username': value }, 'cache': false, 'async': false, 'success': function(data) { redata = data; } }); 通过浏览器开发者模式查看 实际上是访问了 http://www.x

jquery的ajax函数的原理是什么,jquery和ajax的关系是什么?

问题描述 jquery的ajax函数的原理是什么,jquery和ajax的关系是什么? jquery的ajax函数的原理是什么,jquery和ajax的关系是什么? 解决方案 历史遗留的原因,不同浏览器初始化ajax的方式不同,jquery的ajax对此做了封装.实现了异步调用.jquery是一个ajax的库,但是不是唯一的库. 解决方案二: 历史遗留的原因,不同浏览器初始化ajax的方式不同,jquery的ajax对此做了封装.实现了异步调用.jquery是一个ajax的库,但是不是唯一的库.

j2ee-关于ajax的xmlhttp同一页面多次使用

问题描述 关于ajax的xmlhttp同一页面多次使用 我查了xmlhttp多次使用只发送一次的解决方案是在xmlhttp.open()的第二个参数中加上个随机数,但是按照文章分析的过程,每次xmlhttp.open()中的第二个参数的这个页面都会缓存,那如果加上随机数的话,多次发送岂不是越缓存越多??我这样理解对吗?如果对有什么更好的办法? 解决方案 同一页面无法多次使用XmlHttp发起Ajax请求解决同一页面无法多次使用XmlHttp发起Ajax的问题同一页面无法多次使用XmlHttp发起

Ajax获取XMLHttp对象的方法_AJAX相关

本文实例讲述了Ajax获取XMLHttp对象的方法.分享给大家供大家参考,具体如下: Ajax 中要用到XMLHttp对象,我见过各种获取该对象的写法,觉得该写法最优雅.首先考虑到了适合不同的浏览器:其次考虑到了优先加载次序,从高版本向低版本试探,最后若还没找到,则抛出异常. function FactoryXMLHttpRequest() { if(window.XMLHttpRequest) { return new XMLHttpRequest(); }else if(window.Act

Ajax获取XMLHttp对象的方法

本文实例讲述了Ajax获取XMLHttp对象的方法.分享给大家供大家参考,具体如下: Ajax 中要用到XMLHttp对象,我见过各种获取该对象的写法,觉得该写法最优雅.首先考虑到了适合不同的浏览器:其次考虑到了优先加载次序,从高版本向低版本试探,最后若还没找到,则抛出异常. function FactoryXMLHttpRequest() { if(window.XMLHttpRequest) { return new XMLHttpRequest(); }else if(window.Act

理解 Ajax 及其工作原理,构建网站的一种有效方法

ajax Ajax 由 HTML.JavaScript 技术.DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序.本文的作者是一位 Ajax 专家,他演示了这些技术如何协同工作 -- 从总体概述到细节的讨论 -- 使高效的 Web 开发成为现实.他还揭开了 Ajax 核心概念的神秘面纱,包括 XMLHttpRequest 对象. <--START RESERVED FOR FUTURE USE INCLUDE FILES--><--

ajax的工作原理以及异步请求的封装介绍_AJAX相关

Ajax原理: 客户端通过浏览器的内置对象XMLHttpRequest来发送异步请求,当服务器返回响应时,会调用先前注册的回调函数,在回调函数中可以使用javascript操作DOM来更新页面,异步请求不会阻塞客户端的操作,达到页面无法刷新就可以更新数据的效果. 异步请求的封装: 复制代码 代码如下: var xhr=false; //step1:创建一个兼容浏览器各个版本的XMLHttpRequest对象 if (window.XMLHttpRequest) { //IE7+, Firefox

ajax的工作原理以及异步请求的封装介绍

Ajax原理: 客户端通过浏览器的内置对象XMLHttpRequest来发送异步请求,当服务器返回响应时,会调用先前注册的回调函数,在回调函数中可以使用javascript操作DOM来更新页面,异步请求不会阻塞客户端的操作,达到页面无法刷新就可以更新数据的效果. 异步请求的封装: 复制代码 代码如下: var xhr=false; //step1:创建一个兼容浏览器各个版本的XMLHttpRequest对象 if (window.XMLHttpRequest) { //IE7+, Firefox