ajax : Asynchronous JavaScript and XML 异步 JavaScript 和 XML,用 javascript 异步形式去操作 xml。
ajax 要做的事情就是,从某个接口取数据,然后把取出来的数据,根据不同的特性进行不同的处理,然后再将处理后的结果进行进一步的操作,比如说反馈给用户或者进行数据分析。
使用 Ajax 可以做到只更新页面中的一小部分。至于其他内容–标志、导航、头部、脚部、都不用重新加载。只有页面中的一小部分区域会更新,而不必再次加载整个页面。
Ajax 的主要优势就是对页面请求以异步方式发送到服务器。而服务器不会用整个页面来响应请求,它会在后台处理请求,与此同时用户还能继续浏览页面并与页面交互。
你的脚本可以按需加载和创建页面内容,而不会打断用户的浏览体验。利用 Ajax , web 应用可以呈现出功能丰富、交互敏捷、类似桌面应用般的体验,就像你使用谷歌地图时的感觉一样。
在使用 ajax 时,千万要注意同源策略。使用 XMLHttpRequest 对象发送的请求只能访问与其所在的 HTML 处于同一域中的数据,不能向其他域发送请求。此外,有些浏览器还会限制 ajax 请要求使用的协议。比如在 chrome 中,如果你使用 file:// 协议从自己的硬盘里面再加文件,就会看到“跨域请求只支持 THHP 协议”的错误消息。
异步请求有一个很容易被忽略的特性是异步性,就是脚本在发送 XMLHttpRequest 请求之后,仍然会继续执行,不会等待响应返回。为了证明这一点,可以在 request.onreadystatechange 函数和 getNewContent 函数中各添加一个警告框。
现在加载一下页面试试,很可能显示 “Function done” 的警告框会先于 “reponse received” 的警告框出现。这就证明了脚本不会等待 send 的响应,而是会继续执行。
之所以说“很可能”,是因为有时候服务器的响应也会非常快。如果你是从本地硬盘上加载文件,那么在收到响应之前恐怕要等上很长的时间。
为此,如果其他脚本依赖于服务器的响应,那么就要把相应的代码都转移到指定给 onreadystatechange 属性的那个函数中。
function getHTTPObject() { var xhr=null; try{ xhr=new XMLHttpRequest(); }catch(e){ xhr=new ActiveXObject('Microsoft.XMHTTP'); } return xhr; } function getNewContent() { var request = getHTTPObject(); if (request) { request.open("GET", 'example.txt', true); request.onreadystatechange = function() { if (request.readyState == 4) { alert("reponse received"); var para = document.createElement('p'); var txt = document.createTextNode(request.responseText); para.appendChild(txt); document.getElementsByClassName('new').appendChild(para); } }; request.send(null); } else { alert("sorry, your browser doesn't suppurt new XMLHttpRequest"); } alert('function done'); } addLoadEvent(getNewContent); <script type="text/javascript"> window.onload=function(){ var oBtn=document.getElementById('btn'); oBtn.onclick=function(){ /* 利用 XMLHttpRequest 创建一个 ajax 对象,然后利用对象的属性和方法去完成一个数据交互的流程 兼容性问题:ie6 及以下不支持 XMLHttpRequest ,用的是 newActiveXObject('Microsoft.XMHTTP'),这是ie的一个插件 */ //首先定义一个对象 var xhr=null; //第一种兼容方式,ie下的兼容: /* 在 XMLHttpRequest前面加了 'window.' 在 ie6及 以下才不会报错,这时候 XMLHttpRequest 只是 window下面的一个属性,即使不存在 也不会报错,只会返回undefine,代码如下: */ /* if(window.XMLHttpRequest){ xhr=new XMLHttpRequest(); }else{ xhr=new ActiveXObject('Microsoft.XMHTTP'); } */ //第二种兼容方式,用异常处理来做兼容 try{ //代码尝试执行这个块里面的内容,如果有错误,则会执行 catch 里面的代码,并且传入错误信息参数 xhr=new XMLHttpRequest(); }catch(e){ xhr=new ActiveXObject('Microsoft.XMHTTP'); } /* open方法参数: 1.打开方式 2.地址 3.是否异步 异步:非阻塞 前面的代码不会影响后面代码的执行 同步:阻塞 前面的代码会影响后面代码的执行 */ xhr.open('get','1.txt',true); //提交 xhr.send(); //等待服务器返回内容 xhr.onreadystatechange=function(){ if(xhr.readyState==4){ alert(xhr.responseText); } } } } </script>