前端必备技能之AJAX的实现原理

来源:互联网 发布:手机编写c语言的软件 编辑:程序博客网 时间:2024/05/21 10:18

在了解原理之前,先来了解一下什么是AJAX。

AJAX 的全称是Asynchronous JavaScript and XML,其中,Asynchronous是异步的意思,它有别于传统web开发中采用的同步的方式。
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。 AJAX是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

AJAX所包含的技术

1.使用CSS和XHTML来表示。
2. 使用DOM模型来交互和动态显示。
3.使用XMLHttpRequest来和服务器进行异步通信。
4.使用javascript来绑定和调用。
在上面几中技术中,除了XmlHttpRequest对象以外,其它所有的技术都是基于web标准并且已经得到了广泛使用的,XMLHttpRequest虽然目前还没有被W3C所采纳,但是它已经是一个事实的标准,因为目前几乎所有的主流浏览器都支持它。

AJAX实现原理

在上面提到了XMLHTTPRequest,这个XMLHTTPRequest是什么呢?

从重要性来说,XMLHttpRequest 是 AJAX 的基础。所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象。

创建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) { }        }    }}

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的方法

open(method,url,async),规定请求的类型、URL 以及是否异步处理请求。
1.method:请求的类型;GET 或 POST
2.url:文件在服务器上的位置
3.async:true(异步)或 false(同步)

send(string),将请求发送到服务器。
string:仅用于 POST 请求

setRequestHeader(header,value)
向请求添加 HTTP 头。
header: 规定头的名称
value: 规定头的值

abort 方法
如果XMLHttpRequest对象的 readyState 属性还没有变成4,这个方法可以终止请求。这个方法可以确保异步请求中的回调不被执行。

GET 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 POST 请求:
1、无法使用缓存文件(更新服务器上的文件或数据库)
2、向服务器发送大量数据(POST 没有数据量限制)
3、发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

异步 - True 或 False?

当使用 async=true 时,需要利用XMLHTTPRequest的 onreadystatechange 事件来执行相应状态时的函数,下面是一个例子

xmlhttp.onreadystatechange=function()  {  if (xmlhttp.readyState==4 && xmlhttp.status==200)    {      alert(xmlhttp.responseText);    }  }xmlhttp.open("GET","url",true);xmlhttp.send();

而当async=false时,则不需要,下面是为false时的用法

xmlhttp.open("GET","url",false);xmlhttp.send();alert(xmlhttp.responseText);

不推荐使用 async=false,但是对于一些小型的请求,也是可以的。

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑网易云音乐闪退怎么办 逆战耳机电流声怎么办 肠道感染一直吃药治不好怎么办 如果24小时以后还没到账该怎么办 在游戏平台充值没到账该怎么办 充值豪华黄钻没到账该怎么办 起点签到签满了怎么办 ipad锁屏声音小怎么办 扣扣邮箱文件超大了怎么办 网易邮箱图片已过期怎么办 邮箱里面的文件过期了怎么办 邮箱发的文件过期了怎么办 邮箱发送的文件过期怎么办 小米4s开不开机怎么办 小米平板关机后开不开机怎么办 公司老板跑路了社保怎么办 公司老板跑路社保怎么办 公司被公安局查封社保怎么办 小米四开不了机怎么办 小米的手机后壳裂了怎么办 公司没钱拖欠员工社保怎么办 小米note充不进去电怎么办 公司欠社保没交怎么办 公司不给转社保怎么办 小米note充电特别慢怎么办 小米小米note2充电慢怎么办 小米note充电红灯不闪烁怎么办 小米note充电红灯闪烁怎么办 小米note2突然充电慢怎么办 充电小米note2手机闪烁怎么办 小米6x上网慢怎么办 小米5数据上网慢怎么办 小米5c照相模糊怎么办 小米5充电很慢怎么办 iphone图库照片没了怎么办 我想通过微信号得到手机号怎么办 给充电宝充电慢怎么办 小米5s充不了电怎么办 百度网盘下载速度慢怎么办 负债累累没有钱没有资源怎么办 好福利密码忘了怎么办