首页 > 代码库 > ajax本质

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部分找到对应内容

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

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