一、远古ajax实现方式如下:
1、前端请求后台,后台设置返回 http状态码204
2、运用img图片(或css/javascript等)的加载机制,请求后台
3、post提交数据,运用iframe标签,能post提交,且页面不刷新
二、现代ajax(运用XMLHttpRequest):
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
//创建http请求
function createHttp(){
var xml = null;
if(window.XMLHttpRequest){
xml = new XMLHttpRequest(); //现在主流浏览器,包括IE7和以上版本
}else if(window.ActiveXObject){
xml = new ActiceXObject('Microsoft.XMLHTTP'); //兼容IE6的浏览器
}
return xml;
} //构造发送请求
function httpStart(){
var xml = createHttp(); //创建http对象
xml.open('GET','./2020-02-22.php',true); //第一个参数:设置请求方式, 第二个参数:设设置请求 第三个参数:设置同步还是异步
xml.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); //设置为post请求, 必须在open() 之后、send() 之前调用setRequestHeader
xml.send(null); //设置请求发送的数据,数据的格式:像get传参 key1=value1&key2=value2
xml.onreadystatechange = function(){ //请求的状态每次变化都会触发这个函数
var state = this.readyState; //请求的状态值0-1-2-3-4 5个代表值,其中4代表成功
if(state == 4){
console.log('请求状态码:'+state)
var text = this.responseText; //获取返回的主体信息
console.log('返回主体:'+text)
var response = this.response;
console.log('返回信息:'+response)
var responseType = this.responseType;
console.log('返回数据类型:'+responseType)
var status = this.status;
console.log('返回的状态码:'+status)
var statusText = this.statusText;
console.log('返回的状态信息:'+statusText)
var responseXML = this.responseXML;
console.log('返回的xml信息:'+responseXML) //返回xml类型对象
var getResponseHeader = this.getResponseHeader('Content-length'); //http返回的属性名
console.log('返回请求的数据长度:'+getResponseHeader)
var getAllResponseHeaders = this.getAllResponseHeaders();
console.log('返回请求的全部信息:'+getAllResponseHeaders)
}
}
}
</script>
</head>
<body>
<button onclick="httpStart()">点击我</button>
</body>
</html>
三、HTML5简单带进度条的文件上传
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<script type="text/javascript">
function selfile(){
var div2 = document.getElementById('div2');
var file = document.getElementById('file').files[0];//html5新属性,获取上传文件对象
var fm = new FormData(); //html5新属性,创建表单对象
fm.append('file',file);
var xml = new XMLHttpRequest(); //创建请求
xml.open('POST','dfadf.php',true);
xml.upload.onprogress = function (ev){//绑定上传的文件的监听事件
if(ev.lengthComputable){//开始上传的标志
var progress = 100*ev.loaded/ev.total;//上传文件的大小/文件总大小
div2.style.width = progress + '%';
div2.innerHTML = parseInt(progress) + '%';
}
}
xml.send(fm);
}
</script>
<style type="text/css">
#div1{
width:500px;
height:30px;
border: 1px solid green;
}
#div2{
width: 0%;
height:100%;
background: green;
}
</style>
</head>
<body>
<h1>html5进度条文件上传</h1>
<div id="div1">
<div id="div2"></div>
</div>
<input id="file" type="file" name="点击上传" onchange="selfile();" >
</body>
</html>