zoukankan      html  css  js  c++  java
  • js 实现对ajax请求面向对象的封装

             AJAX 是一种用于创建高速动态网页的技术。通过在后台与server进行少量数据交换。AJAX 能够使网页实现异步更新。这意味着能够在不又一次载入整个网页的情况下,对网页的某部分进行更新。
            在js中使用ajax请求一般包括三个步骤:
                  1、创建XMLHttp对象
                  2、发送请求:包含打开链接、发送请求
                  3、处理响应
            在不使用不论什么的js框架的情况下。要想使用ajax。可能须要向以下一样进行代码的编写

    var xmlHttp = xmlHttpCreate();//创建对象
    xmlHttp.onreadystatechange = function(){//响应处理
    	if(xmlHttp.readyState == 4){
    		console.info("response finish");
    		if(xmlHttp.status == 200){
    			 console.info("reponse success");
    			console.info(xmlHttp.responseText);
     		}
    	}
    }
    xmlHttp.open("get","TestServlet",true);//打开链接
    
    xmlHttp.send(null);//发送请求
    
    function xmlHttpCreate() {
    	var xmlHttp;
    	try {
    		xmlHttp = new XMLHttpRequest;// ff opera
    	} catch (e) {
    		try {
    			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");// ie
    		} catch (e) {
    			try {
    				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    			} catch (e) {
    
    			}
    		}
    	}
    	return xmlHttp;
    }
    
    console.info(xmlHttpCreate());

    假设在比較复杂的业务逻辑里面使用这样的ajax请求,会使得代码非常臃肿,不方便重用,而且能够看到,可能在server响应成功后要处理一个业务逻辑操作。这个时候不得不把操作写在onreadystatechage方法里面。


    为了方便代码的重用我们能够做出例如以下处理;
          1、server响应成功后,要处理的业务逻辑交给开发者自己处理
          2、对请求进行面向对象的封装
    
    处理之后看起来应该像以下这个样子:
    
    window.onload = function() {
    	document.getElementById("hit").onclick = function() {
    		console.info("開始请求");
    		ajax.post({
    				data : 'a=n',
    				url : 'TestServlet',
    				success : function(reponseText) {
    					console.info("success : "+reponseText);
    				},
    				error : function(reponseText) {
    					console.info("error : "+reponseText);
    				}
    		});
    	}
    }
    
    var ajax = {
    	xmlHttp : '',
    	url:'',
    	data:'',
    	xmlHttpCreate : function() {
    		var xmlHttp;
    		try {
    			xmlHttp = new XMLHttpRequest;// ff opera
    		} catch (e) {
    			try {
    				xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");// ie
    			} catch (e) {
    				try {
    					xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    				} catch (e) {
    
    				}
    			}
    		}
    		return xmlHttp;
    	},
    	post:function(jsonObj){
    		ajax.data = jsonObj.data;
    		ajax.url = jsonObj.url;
    		//创建XMLHttp对象,打开链接、请求、响应
    		ajax.xmlHttp = ajax.xmlHttpCreate();
    		ajax.xmlHttp.open("post",ajax.url,true);
    		ajax.xmlHttp.onreadystatechange = function(){
    			if(ajax.xmlHttp.readyState == 4){
    				if(ajax.xmlHttp.status == 200){
    					jsonObj.success(ajax.xmlHttp.responseText);
    				}else{
    					jsonObj.error(ajax.xmlHttp.responseText);
    				}
    			}
    		}
    		ajax.xmlHttp.send(ajax.data);
    	}
    };
    
    上述代码实现了相似jquery中的ajax操作,读者有不懂的地方能够慢慢思考或者在此留言 
    

















    
    

  • 相关阅读:
    图灵访谈之二十二——Brian W. Kernighan与CS的半个世纪 (翻译)
    GIT 初探
    关于SQL的分组汇总统计(关键字 Grouping)
    根据表名生成该表的插入语句
    利用sys.dm_db_index_physical_stats查看索引碎片等数据
    SQL SERVER CURSOR
    Configuring a readonly replicated folder on Windows Server 2008 R2.
    securestring
    Sql Server查询性能优化
    七大排序速查版
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6914463.html
Copyright © 2011-2022 走看看