ajax请求
function ajax(url,funSucc,funFail){
//1.创建Ajax对象
//用没有定义的变量->报错
//用没有定义的方法->undefined
if(window.XMLHttpRequest){
//只兼容非ie6的浏览器
var oAjax=new XMLHttpRequest();
}
else{
//ie6
var oAjax=new ActiveXObject("Microsoft.XMLHTTP");
}
//2.连接服务器
//异步:true
oAjax.open('GET',url,true);
//3.发送请求
oAjax.send(null);
//4.接收返回值
oAjax.onreadystatechange=function(){
if(oAjax.readyState==4 && oAjax.status==200){
funSucc(oAjax.responseText);
//alert(oAjax.responseText);//服务器返回的文本
}
else{
if(funFail){funFail(oAjax.status);}//判断是否有失败函数才调用
}
}
}
阻止缓存
//url后面问号加时间函数,此时url在不断变化
'url?t=' + new Date().getTime(),...
XHR对象的用法
open()
//启动一个请求
//接收三个参数:请求类型,请求的url,是否异步(true表示异步)
send()
//发送请求
//接收一个参数,即要作为请求主体发送的数据,若不需要则填入null
接收到响应后,响应的数据会自动填充XHR对象的属性:
responseText: 作为响应返回的文本
responseXML: 如果响应的内容类型是'text/xml'或者'application/xml',这个属性中将保存包含着响应数据的XML DOM文档
status: 响应的HTTP状态
statusText: HTTP状态的说明
readyState: 表示请求/响应过程的当前活动阶段
属性值:
0:未初始化,没有调用open()
1:启动,已经调用open(),尚未调用send()
2:发送,已经调用send(),尚未收到响应
3:接收,已经接收到部分数据
4:完成,已经接收全部数据,可以在客户端使用了
每次readyState的值改变,都会触发一次readyStatechange事件
要在调用open()之前指定onreadyStatechange事件才能确保浏览器兼容
进度事件
有以下6个进度事件
loadstart:在接收到响应数据的第一个字节时触发
progress:在接收响应期间持续不断地触
error:在请求发生错误时触发
abort:在因为调用abort()方法而终止连接时触发
load:在接收到完整的响应数据时触发
loadend:在通信完成或者触发error、abort或load事件后触发
浏览器适用
ff,safari,chrome,ios的safari和安卓的webkit都支持
IE9-浏览器不支持以上事件(IE9浏览器仅支持load事件)
每个请求都从触发loadstart事件开始,接下来,通常每隔50毫秒左右触发一次progress事件,然后触发load、error、abort或timeout事件中的一个,最后以触发loadend事件结束
progress
progress事件会在浏览器接收新数据期间周期性地触发。而onprogress事件处理程序会接收到一个event对象,其target属性是XHR对象,但包含着三个额外的属性:lengthComputable、loaded和total。其中,lengthComputable是一个表示进度信息是否可用的布尔值,loaded表示已经接收的字节数,total表示根据Content-Length响应头部确定的预期字节数。有了这些信息,就可以为用户创建一个进度指示器了
为确保准确执行,必须在调用open()之前添加onprogress事件处理程序
xhr.onprogress = function(e){
e = e || event;
if (e.lengthComputable){
result.innerHTML = "Received " + e.loaded + " of " + e.total + " bytes";
}
};