加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ajax入门

发布时间:2020-12-15 21:39:03 所属栏目:百科 来源:网络整理
导读:第一个测试程序: htmltitle完整的使用XMLHttpRequest加载文档的例子/titleheadscript type='text/javascript'var req=null;var console=null;var READY_STATE_UNINITIALIZED=0;var READY_STATE_LOADING=1;var READY_STATE_LOADED=2;var READY_STATE_INTERACT
第一个测试程序:
<html>
	<title>完整的使用XMLHttpRequest加载文档的例子</title>
	<head>
		
		<script type='text/javascript'>
		
			var req=null;
			var console=null;
			var READY_STATE_UNINITIALIZED=0;
			var READY_STATE_LOADING=1;
			var READY_STATE_LOADED=2;
			var READY_STATE_INTERACTIVE=3;
			var READY_STATE_COMPLETE=4;
			
			function sendRequest(_url,_params,_httpMethod){
				_httpMethod = _httpMethod || 'GET';
				
				req = initXMLHTTPRequest();
				if(req){
					req.onreadystatechange = onReadyState;
					req.open(_httpMethod,_url,true);
					req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
					req.send(_params);
				}
			}
			
			function initXMLHTTPRequest(){
				if (window.XMLHttpRequest) {
		        return new XMLHttpRequest();
		    } else if (window.ActiveXObject) {
		        return new ActiveXObject("Microsoft.XMLHTTP");
		    }
		    return null;
			}
			
			function onReadyState(){
			  var ready=req.readyState;
			  var data=null;
			  if (ready==READY_STATE_COMPLETE){
			    data=req.responseText;
			  }else{
			    data="loading...["+ready+"]";
			  }
			  toConsole(data);
			}
			
			function toConsole(data){
			  if (console!=null){
			    var newline=document.createElement("div");
			    console.appendChild(newline);
			    var txt=document.createTextNode(data);
			    newline.appendChild(txt);
			  }
			}
			
			window.onload=function(){
			  console=document.getElementById('console');
			  sendRequest("data.txt");
			}
		</script>
		
	</head>
	<body>
		<div id='console'></div>
	</body>
</html>


学会重构:
/*
 *url-loading object and a request queue built on top of it
 */

/* namespacing object */
var Darkness = new Object();

Darkness.READY_STATE_UNINITIALIZED=0;
Darkness.READY_STATE_LOADING=1;
Darkness.READY_STATE_LOADED=2;
Darkness.READY_STATE_INTERACTIVE=3;
Darkness.READY_STATE_COMPLETE=4;


/*--- content loader object for cross-browser requests ---*/
Darkness.ContentLoader = function(url,onload,onerror,method,params,contentType){
  //this.url = url;
  this.req=null;
  this.onload = onload;
  this.onerror=(onerror) ? onerror : this.defaultError;
  this.loadXMLDoc(url,contentType);
}

Darkness.ContentLoader.prototype = {
	initXMLHTTPRequest:function(){
		if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
    return null;
	},onReadyState: function(){
	  var req = this.req;
	  var ready = req.readyState;
	  
	  if (ready == Darkness.READY_STATE_COMPLETE){
	  	var httpStatus = req.status;
	    if (httpStatus==200 || httpStatus==0){
	      this.onload.call(this);
	    }else{
	      this.onerror.call(this);
	    }
	  }
	},loadXMLDoc: function(url,contentType){
	  method = method ||"GET";
	  
	  if (!contentType && method=="POST"){
	    contentType='application/x-www-form-urlencoded';
	  }
	  this.req = this.initXMLHTTPRequest();
	  if (this.req){
	    try{
	      var loader = this;
	      this.req.onreadystatechange = function(){
	        loader.onReadyState.call(loader);
	      }
	      this.req.open(method,url,true);
	      if (contentType){
	        this.req.setRequestHeader('Content-Type',contentType);
	      }
	      this.req.send(params);
	    }catch (err){
	      this.onerror.call(this);
	    }
	  }
	},defaultError:function(){
	  alert("error fetching data!"
	    +"nnreadyState:"+this.req.readyState
	    +"nstatus: "+this.req.status
	    +"nheaders: "+this.req.getAllResponseHeaders());
	}
}

接着来看一下重构后页面中的代码,优点自己领悟哦:
<html>
	<title>完整的使用XMLHttpRequest加载文档的例子-Refactor</title>
	<head>
		<script src="ContentLoader.js" type="text/javascript"></script>
		<script type='text/javascript'>	
			var console=null;
			
			function toConsole(){
				var data = this.req.responseText;
			  if (console!=null){
			    var newline=document.createElement("div");
			    console.appendChild(newline);
			    var txt=document.createTextNode(data);
			    newline.appendChild(txt);
			  }
			}
			
			window.onload=function(){
			  console=document.getElementById('console');
			  // 仅使用这一行代码,传入请求的url及回调函数,
			  // 就可完成一个简单的Ajax操作,重构真的可以带来很多好处哦
			  new Darkness.ContentLoader('data.txt',toConsole);
			}
		</script>
		
	</head>
	<body>
		<div id='console'></div>
	</body>
</html>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读