• 原生JS实现ajax


    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Examples</title>
    <meta name="description" content="">
    <meta name="keywords" content="">
    <link href="" type="text/css" rel="stylesheet">
    <script type="text/javascript">
    /*
     *AJAX方法封装:2013年11月22日
     *参数说明:
     *type//请求方法
     *async//true表示异步读取文件
     *url//url路径
     *data//发送数据
     *timeout//设置超时时间
     *contentType//写入header头,表示请求类型
     *beforeSend//ajax请求之前调用方法,如果该函数返回false,将会阻止AJAX请求
     *success//响应成功时调用方法(XHR.status===200)
     *complete//请求完成后回调函数 (请求成功或失败之后均调用)。
     **/
    (function(){
    	var httpRequest=(function(){
    	    try{
    	        /*****FF,Google等*****/
    	        return function(){
    	        	return new XMLHttpRequest();
    	        };
    	    }catch(e){
    	        try{
    	            /*****IE某些版本*****/
    	            return function(){
    		        	return new ActiveXObject("Msxml2.XMLHTTP");
    		        };
    	        }catch(e){
    	            try{
    	                /*****其他IE版本*****/
    	                return function(){
    			        	return new ActiveXObject("Microsoft.XMLHTTP");
    			        };
    	            }catch(e){
    	                return null;
    	            }
    	        }
    	    }
    	})();
    	/*暴露ajax方法*/
    	window.ajax=function (param){
    		//处理参数
    		param.type=param.type || "GET";
    		param.async=param.async || true;
    		param.url=param.url || window.location.href;
    		param.data=param.data || "";
    		param.timeout=param.timeout || 10000;
    		param.complete=param.complete || function(){};
    		param.contentType=param.contentType || {
    			"Content-type":"x-www-form-urlencoded"
    		};
    		//初始化变量
    		var textStatus="";
    		var timer=null;
    		//状态函数
    		var stateChangeFn=function(){
    			/*
    			*readyState五个状态0:未发送请求,1:已发送请求,2:已经握手,3:正在处理请求,4:请求处理完成
    			*0:请求未初始化(还没有调用 open())。
    			*1:请求已经建立,但是还没有发送(还没有调用 send())。
    			*2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
    			*3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
    			*4:响应已完成;您可以获取并使用服务器的响应了。
    			*/
    			if(XHR.readyState===4){
    				if(XHR.status===200){
    					//响应成功
    					param.success && param.success(XHR.responseText);
    					textStatus="success";
    				}else {
    					textStatus=XHR.status;
    				}
    				clearTimeout(timer);
    				param.complete(textStatus);
    			}
    		};
    		if(httpRequest === null){
    			//alert("你的浏览器不支持AJAX");
    			param.complete("error");
    			return false;
    		}else {
    			XHR=new httpRequest();
    		}
    		if(param.beforeSend && param.beforeSend()===false){
    			return false;
    		}
    		//post请求
    		if(param.type==="POST"){
    			XHR.open("POST",param.url,param.type);
    			for(var key in param.contentType){
    				XHR.setRequestHeader(key,param.contentType[key]);
    			}
    			XHR.onreadystatechange=stateChangeFn;
    			XHR.send(param.data);
    		}
    		//get请求
    		else if (param.type==="GET"){
    			XHR.open("GET",param.url+"?"+param.data,param.type);
    		    XHR.onreadystatechange=stateChangeFn;
    		    XHR.send(null);
    		}
    		//设置请求过期时间,十秒超时
    		timer = setTimeout(function(){//AJAX请求十秒超时
    			XHR.abort();
    			param.complete("timeout");
    		}, param.timeout);
    	}
    })();
    /************分割线************/
    window.onload=function(){
    	ajax({
    		type:"GET",
    		async:true,//true表示异步读取文件
    		url:"ajax.txt",
    		data:"a&b",//发送数据
    		timeout:8000,//8秒超时
    		contentType:{//请求头信息,只对POST请求有效
    			"Content-type":"x-www-form-urlencoded"
    		},
    		beforeSend:function(){//ajax请求之前调用,如果该函数返回false,将会阻止AJAX请求
    			document.getElementById("beforeSend").innerHTML="开始加载...."
    		},
    		success:function(msg){//响应成功时调用
    			document.getElementById("success").innerHTML="返回结果:"+msg;
    		},
    		complete:function(state){//请求完成后回调函数 (请求成功或失败之后均调用)。
    			document.getElementById("complete").innerHTML="请求完成,状态:"+state;
    		}
    	});
    }
    </script>
    </head>
    <body>
    <div id="beforeSend"></div>
    <div id="success"></div>
    <div id="complete"></div>
    </body>
    </html>
    

      同目录下新建ajax.txt文件,用http访问以上html文件。

  • 相关阅读:
    VS2005调试问题与解决方法集锦
    [转]在.net 2005中,将数据集序列化成二进制,提高远程传输效率
    DotNet 网上相关资源
    NeHE中文学习网址
    Aspx页上设置客户端的缓存时间
    动态调用Win32 Function(API)
    PB调用COM组件
    字段绑定的效率问题
    三维向量类
    用DataTable绑定TreeView的方法
  • 原文地址:https://www.cnblogs.com/iloveyou-sky/p/6184430.html
Copyright © 2020-2023  润新知