//定义一个变量,当因为网络连接断开而使得Ajax调用无法立即执行,把Ajax的调用放在stack数组中
var stack=[];
//定义函数产生ajax调用
function ajax(url,callback)
{
//利用XMLHttpRequest类使得可以在浏览器中产生Ajax请求
var xhr=new XMLHttpRequest(),
LOADED_STATE=4,
OK_STATUS=200;
//如果浏览器处于离线状态,吧函数参数(url和callback)添加到stack 变量中以便用于稍后的处理
if(!navigator.online)
{
stack.push(arguments);
}else
{
//如果浏览器处于在线状态,则发出Ajax调用
xhr.onreadystatechange=function(){
//readyState属性为4则表示服务器的响应已经完成
if(xhr.readyState!==LOADED_STATE){
return;
}
//如果服务器返回HTTP的状态码为200,执行回调函数
if(xhr.status===OK_STATUS)
{
callback(xhr.responseText);
}
};
//触发Ajax HTTP GET 操作
xhr.open("GET",url)
xhr.send();
}
}
//定义一个函数,依次遍历尚未发出的Ajax调用的stack数组,依次发送Ajax调用
funtion clearStack(){
while(stack.length)
{
ajax.apply(ajax,stack.shift());
}
}
window.addEventListener("online",clearStack,false);
ajax在网络断开时,缓存ajax的调用,网络连接时,恢复ajax调用
最新推荐文章于 2022-04-23 13:42:20 发布