Ajax=异步javascript 和 xml
Ajax 是一种用于创建快速动态页面的技术
XmlHttpRequest是ajax的基础
所有现代浏览器均支持xmlhttprequest对象 (IE5和IE6使用ActiveXObject).
xmlhttprequest用于在后台与服务器交换数据。这意味着可以在不重新加载整个页面的情况下,对页面的某部分进行更新。
为了对应所有的浏览器,创建xmlhttprequest:
var xmlhttp; if(window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); } else { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }
向服务器发送请求:
如果需要向服务器发送请求,使用XMLHttpRequest对象的open()和send()方法
xmlhttp.open("GET","test1.txt",true); xmlhttp.send();
方法 描述 open(method,url,async) 规定请求的类型、URL 以及是否异步处理请求。 method:请求的类型;GET 或 POST url:文件在服务器上的位置 async:true(异步)或 false(同步) send(string) 将请求发送到服务器。 string:仅用于 POST 请求
Get 还是 Post?
与post 相比 简单也更快,并且在大多数情况下也都能用。
然而,在以下情况下,请使用post:
1.无法使用缓存文件(更新服务器上的文件和数据库)
2.向服务器发送大量数据(post没有数据限制)
3.发送包含未知字符的用户输入时,post比get更稳定也更可靠
get 请求 xmlhttp.open("GET","demo_get.asp?t=" + Math.random(),true); xmlhttp.send(); POST 请求 一个简单 POST 请求 xmlhttp.open("POST","demo_post.asp",true); xmlhttp.send(); 如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据: xmlhttp.open("POST","ajax_test.asp",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("fname=Bill&lname=Gates");
javascript 会等到服务器响应就绪才继续执行。如果服务器繁忙或者缓慢,应用程序会挂起或停止
通过ajax,javascript无需等待服务器的响应,而是:
1.在等待服务器响应时执行其他脚本
2.在响应就绪后对响应进行处理
Async=true
当使用async=true时,请规定响应处于onreadystatechange事件中的就绪状态时执行的函数
xmlhttp.onreadystatechange=function(){ if(xmlhttp.readyState==4&&xmlhttp.status==200){ document.getElementId("mydiv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","text1.txt",true); xmlhttp.send();
Async=false
如果async=false不需要使用onreadystatechange函数 把代码放到send()语句后面即可
xmlhttp.open("GET","text.txt",false); xmlhttp.send(); document.getElmentId("mydiv" ).innerHTML=xmlhttp.responseText;
如果需要获得服务器的响应,请使用xmlHttpReqpest对象的responseText或responseXML属性
请求boox.xml文件,并解析响应:
xmlDoc=xmlhttp.responseXML; txt=""; x=xmlDoc.getElementByTagName("Artist"); for(i=0;i<x.length;i++) { txt=txt+x[i].childNodes[0].nodeValue+"<br>"; } document.getElementById("mydiv").innerHtml=txt;
Ajax 事件
xmlhttprequest对象的三个重要的属性:
onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 readyState 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。 0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪 status 200: "OK" 404: 未找到页面
当 readyState 等于 4 且状态为 200 时,表示响应已就绪
xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }
CallBack函数 (回调函数)
是一种以参数形式传递给另一个函数的函数
如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。
该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同):
function myFunction() { loadXMLDoc("ajax_info.txt",function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }); }