ajax本质

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

ajax作用:在不刷新整个页面情况下,更新部分网页

ajax实质:ajax全部的工作都由一个对象来做,XMLHttpRequest对像(简写xmlhttp)


先给一个简单的使用xmlhttp来发送ajax请求的例子

<html>

<head>

<script type="text/javascript">

function loadXMLDoc()

{

var xmlhttp;

if (window.XMLHttpRequest)

{// code for IE7+,Firefox,Chrome,Opera,Safari

xmlhttp=new XMLHttpRequest();

}

else

{// code for IE6,IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

xmlhttp.onreadystatechange=function()

{

if (xmlhttp.readyState==4 && xmlhttp.status==200)

{

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

}

xmlhttp.open("GET","/ajax/test1.txt",true);

xmlhttp.send();

}

</script>

</head>

<body>


<div id="myDiv"><h2>Let AJAX change this text</h2></div>

<button type="button" AJAX 改变内容</button>


</body>

</html>

创建XMLHttpResponse对象:

xmlhttp=new XMLHttpRequest() 是后来的浏览器才支持

更早的用xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

先用 if(window.XMLHttpRequest) 来判断支持,选择用哪种方式来创建该对象


发送请求:

xmlhttp.open() xmlhttp.send()

可以通过open()的参数来配置 是 get 或者 post方式

post和get区别

1 post无法使用缓存

2 get发送参数的长度有限制

3 post比get更安全

分析

1 只能记了

2 get的参数放在url中,url长度有限制

3 post的请求数据放在数据报中,get放在url中

post方法设置请求参数示例:

xmlhttp.open("post",url,true);

xmlhttp.setRequestHeader("Content-type","application/x-www-from-urlencoded");

xmlhttp.send("fname=Bill&name=Gates");

setRequestHeader()方法添加 HTTP 头 至于为什么这样用? 不知道


响应:

xmlhttp.responseText 或者 xmlhttp.resonseXml

也就是说执行完请求以后,如果执行成功,那么不用任何操作,只需要访问xmlhttp的这两个对象即可

访问到响应的结果

就像示例中的这样 document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

responseXml与resonseText区别:两者的数据格式是不同的 responseText是字符串,responseXml是xml格式

xmlhttp状态标示:

readyState、status、onreadystatechange

readyState

存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

  • 0: 请求未初始化

  • 1: 服务器连接已建立

  • 2: 请求已接收

  • 3: 请求处理中

  • 4: 请求已完成,且响应已就绪

status:

200: "OK"

404: 未找到页面

onreadystatechange

函数,当readyState改变时被触发

此时再来看示例中的这段代码是什么意思

xmlhttp.onreadystatechange=function()

{

if (xmlhttp.readyState==4 && xmlhttp.status==200)

{

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

}

}

就是说 在readyState改变时,会触发这个方法

方法体是 如果执行成功(xmlhttp.readyState==4 && xmlhttp.status==200

以 xmlhttp的readyState和status属性作为请求执行成功的依据


从上述可以看出,从上传到响应,到执行状态标示,所有的动作都是xmlhttp放出的,所有的信息结果都储存在xmlhttp属性


xmlhttp是XMLHttpRequest对象的简写

XMLHttpRequest 用于在后台与服务器交换数据,所有的浏览器都支持XMLHttpRequest对象


以上就是ajax的本质内容

不管是 jquery中的jquery.ajax()或者 jquery.post() jquery.get方法都是对这些本质内容的封装(猜测)

以上所有内容可以在w3c ajax部分找到对应内容

写一篇博客只为日后忘记时能快速的看一遍

也加深一下记忆,讲一下自己的见解

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...