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);
window['jsonpCallback'] = function jsonpCallback(ret) {}
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)
}
})
}
}
});
// 也可以写成下面的形式
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);
}
}
});
var count = 3, all_ret = []; // 调用3次
ajax({
url: '/get1.php?id=1',
success:function(ret) {
callback(ret);
}
});
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) {
if (count > 0) {
count--;
// 可以在这儿保存 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);
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>获得书籍列表</title>
<script type="text/javascript">
var xmlhttp;
var txt,x,xx,i;
function loadXMLDoc(url,cfunc)
{
if(window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else
{
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = cfunc;
xmlhttp.open("GET", "<%=request.getContextPath()%>"+url, true);
xmlhttp.send();
}
function myFunction1()
{
loadXMLDoc("/xmls/books.xml",function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
var xmlDoc = xmlhttp.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName_r("title");
for(i=0;i<x.length;i++)
{
txt = txt + x[i].childNodes[0].nodeValue+"<br/>";
}
document.getElementByIdx_x("myDiv").innerHTML = txt;
}
});
}
function myFunction2()
{
loadXMLDoc("/text/test1.txt",function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementByIdx_x("myDiv").innerHTML = xmlhttp.responseText;
}
});
}
function myFunction3()
{
loadXMLDoc("/xmls/cd_catalog.xml",function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
txt="<table border='1'><tr><th>Title</th><th>Artist</th></tr>"
x= xmlhttp.responseXML.documentElement.getElementsByTagName_r("CD");
for(i=0;i<x.length;i++)
{
txt = txt + "<tr>";
xx = x[i].getElementsByTagName_r("TITLE");
{
try{
txt = txt + "<td>" + xx[0].firstChild.nodeValue +"</td>";
}
catch(er)
{
txt = txt +"<td></td>";
}
xx = x[i].getElementsByTagName_r("ARTIST");
try
{
txt = txt + "<td>" + xx[0].firstChild.nodeValue +"</td>";
}
catch(er)
{
txt = txt + "<td></td>";
}
}
txt = txt + "</tr>"
}
txt = txt + "</table>";
document.getElementByIdx_x("myDiv").innerHTML =txt;
}
});
}
</script>
</head>
<body>
<h2>My Book Collection:</h2>
<button type="button" onClick="myFunction1()">获得我的图书收藏列表</button>
<button type="button" onClick="myFunction2()">这是不同的请求</button>
<button type="button" onClick="myFunction3()">获取CD信息</button>
<div id="myDiv"></div>
</body>
</html>
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有