ie8下的ajax封装
测试版本为ie5,ie7,ie8
请求方式options参数设置
var options = {
url:host+'/zzfly',
type:'post',
token:'',
data:{
name: 'zf',
age: 18,
sex: "男"
},
dataType:'json',
success:function(res){ ...... },
//异常处理
error:function(err){ ...... }
}
ajax请求配置
function ajaxRuq(options){
options = options || {}; //options没有指定值的时候,就给它赋值{},一个空的Object
options.type=(options.type || "GET").toUpperCase();// 统一转换请求的格式
options.dataType=options.dataType || "json"; //响应默认为json格式
options.header=options.token || "";
// 对传入的data数据进行转换成字符串,兼容ie8
var datastr = toggleData(options.data);
var xhr;
//考虑兼容性
if(window.XMLHttpRequest){
xhr=new XMLHttpRequest();
}else if(window.ActiveObject){//兼容IE6以下版本
xhr=new ActiveXobject('Microsoft.XMLHTTP');
}
//启动并发送一个请求
if(options.type=="GET"){
xhr.open("GET",options.url+"?"+datastr,true);
xhr.send(null);
}else if(options.type=="POST"){
xhr.open("post",options.url,true);
//设置表单提交时的内容类型
//Content-type数据请求的格式
xhr.setRequestHeader("Content-type","application/json;charset=UTF-8");
xhr.setRequestHeader("token",options.token);
xhr.send(datastr);
}
// 设置超时时间
setTimeout(function(){
if(xhr.readySate!=4){
xhr.abort(); // 超过30后中断请求
}
},30000)
// 接收
// options.success成功之后的回调函数 options.error失败后的回调函数
//xhr.responseText,xhr.responseXML 获得字符串形式的响应数据或者XML形式的响应数据
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
var status=xhr.status;
if(status>=200&& status<300 || status==304){
options.success&&options.success(eval('('+xhr.responseText+')'));
}else{
options.error&&options.error(status);
}
}
}
}
// 转换data数据为string类型
function toggleData(data) {
var count = 0;
var str = '';
for (var value in data) {
count = count + 1;
str = str + value+"="+data[value];
if (count >= 1) {
str = str + '&';
}
}
str = str.slice(0, str.length-1);
return str;
}
ie真的让人头疼
原文:https://www.cnblogs.com/zzf-fly/p/12539835.html