function ajax(option) {
// 创建一个 XMLHttpRequest 对象
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"),
requestData = option.data,
requestUrl = option.url,
requestMethod = option.method;
// 如果是GET请求,需要将option中的参数拼接到URL后面
if ('POST' != requestMethod && requestData) {
var query_string = '';
// 遍历option.data对象,构建GET查询参数
for(var item in requestData) {
query_string += item + '=' + requestData[item] + '&';
}
// 注意这儿拼接的时候,需要判断是否已经有 ?
requestUrl.indexOf('?') > -1
? requestUrl = requestUrl + '&' + query_string
: requestUrl = requestUrl + '?' + query_string;
// GET 请求参数放在URL中,将requestData置为空
requestData = null;
}
// ajax 请求成功之后的回调函数
xhr.onreadystatechange = function () {
// readyState=4表示接受响应完毕
if (xhr.readyState == ("number" == typeof XMLHttpRequest.DONE ? XMLHttpRequest.DONE : 4)) {
if (200 == xhr.status) { // 判断状态码
var response = xhr.response || xhr.responseText || {}; // 获取返回值
// if define success callback, call it, if response is string, convert it to json objcet
console.log(response);
option.success && option.success(response); // 调用回调函数处理返回数据
// 可以判断返回数据类型,对数据进行JSON解析或者XML解析
// option.success && option.success('string' == typeof response ? JSON.parse(response) : response);
} else {
// if define error callback, call it
option.error && option.error(xhr, xhr.statusText);
}
}
};
// 发送ajax请求
xhr.open(requestMethod, requestUrl, true);
// 请求超时的回调
xhr.ontimeout = function () {
option.timeout && option.timeout(xhr, xhr.statusText);
};
// 定义超时时间
xhr.timeout = option.timeout || 0;
// 设置响应头部,这儿默认设置为json格式,可以定义为其他格式,修改头部即可
xhr.setRequestHeader && xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
xhr.withCredentials = (option.xhrFields || {}).withCredentials;
// 这儿主要用于发送POST请求的数据
xhr.send(requestData);
}
ajax({
url: '/post.php',
data: {
name: 'uusama',
desc: 'smart'
},
method: 'GET',
success: function(ret) {
console.log(ret);
}
});
// 指定允许其他域名访问
header('Access-Control-Allow-Origin:*');
// 响应类型
header('Access-Control-Allow-Methods:POST');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with,content-type');
var url = "http://uusama.com", callbaclName = 'jsonpCallback';
script = document.createElement('script');
script.type = 'text/javascript';
script.src = url + (url.indexOf('?') > -1 ? '&' : '?') + 'callback=' + callbaclName;
document.body.appendChild(script);
var result = null;
ajax({
url: '/get.php?id=1',
method: 'GET',
success: function(ret) {
result = ret;
}
});
console.log(result); // 输出 null
// 首先请求第一个ajax
ajax({
url: '/get1.php?id=1',
success: function(ret1) {
// 第一个请求成功回调以后,再请求第二个
if (ret1) {
ajax({
url: '/get2.php?id=4',
success:function(ret2) {
console.log(ret1);
console.log(ret2)
}
})
}
}
});
// 也可以写成下面的形式
// 将第二个ajax请求定义为一个函数,然后调用
var ajax2 = function(ret1) {
ajax({
url: '/get2.php?id=4',
success:function(ret2) {
console.log(ret1);
console.log(ret2)
}
});
};
ajax({
url: '/get1.php?id=1',
success: function(ret1) {
if(ret1){
ajax2(ret1); // 调用第二个ajax请求
}
}
});
var count = 3, all_ret = []; // 调用3次
ajax({
url: '/get1.php?id=1',
success:function(ret) {
callback(ret); // 请求成功后调用统一回调,次数减1
}
});
ajax({
url: '/get2.php?id=1',
success:function(ret) {
callback(ret);
}
});
ajax({
url: '/get3.php?id=1',
success:function(ret) {
callback(ret);
}
});
function callback(ret) {
// 当调用3次以上以后,说明3个ajax军完成
if (count > 0) {
count--; // 每调用一次,次数减1
// 可以在这儿保存 ret 到全局变量
all_ret.push(ret);
return;
} else { // 调用三次以后
// todo
console.log(ret);
}
}
var all_ret = {
ret1: null, // 第一个ajax标识
ret2: null, // 第二个ajax标识
ret3: null, // 第三个ajax标识
};
ajax({
url: '/get1.php?id=1',
success:function(ret) {
all_ret['ret1'] = ret; // 修改第一个ajax请求标识
}
});
ajax({
url: '/get2.php?id=1',
success:function(ret) {
all_ret['ret2'] = ret; // 修改第二个ajax请求标识
}
});
ajax({
url: '/get3.php?id=1',
success:function(ret) {
all_ret['ret3'] = ret; // 修改第三个ajax请求标识
}
});
var repeat = setInterval(function(){
// 遍历是否所有ajax请求标识都已被修改,以此判断是否所有ajax请求都已完成
for(var item in all_ret) {
if (all_ret[item] === null){
return;
}
}
// todo, 到这儿所有ajax请求均已完成
clearInterval(repeat);
}, 50); // 调用次数可以适当调整,不应设的过小或者过大
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有