原生js封装ajax代码

Posted caojiayan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生js封装ajax代码相关的知识,希望对你有一定的参考价值。

 方法一:(类似jQuery的封装方法)

1、ajax函数封装:

 1  /*
 2   *author: Ivan
 3   *date: 2014.06.01
 4   *参数说明:
 5   *opts: {\'可选参数\'}
 6   **method: 请求方式:GET/POST,默认值:\'GET\';
 7   **url:    发送请求的地址, 默认值: 当前页地址;
 8   **data: string,json;
 9   **async: 是否异步:true/false,默认值:true;
10   **cache: 是否缓存:true/false,默认值:true;
11   **contentType: HTTP头信息,默认值:\'application/x-www-form-urlencoded\';
12   **success: 请求成功后的回调函数;
13   **error: 请求失败后的回调函数;
14 */
15 function ajax(opts){ 16 //一.设置默认参数 17 var defaults = { 18 method: \'GET\', 19 url: \'\', 20 data: \'\', 21 async: true, 22 cache: true, 23 contentType: \'application/x-www-form-urlencoded\', 24 success: function (){}, 25 error: function (){} 26 }; 27 28 //二.用户参数覆盖默认参数 29 for(var key in opts){ 30 defaults[key] = opts[key]; 31 } 32 33 //三.对数据进行处理 34 if(typeof defaults.data === \'object\'){ //处理 data 35 var str = \'\'; 36 var value = \'\'; 37 for(var key in defaults.data){ 38 value = defaults.data[key]; 39 if( defaults.data[key].indexOf(\'&\') !== -1 ) value = defaults.data[key].replace(/&/g, escape(\'&\')); //对参数中有&进行兼容处理 40 if( key.indexOf(\'&\') !== -1 ) key = key.replace(/&/g, escape(\'&\')); //对参数中有&进行兼容处理 41 str += key + \'=\' + value + \'&\'; 42 } 43 defaults.data = str.substring(0, str.length - 1); 44 } 45 46 defaults.method = defaults.method.toUpperCase(); //处理 method 47 48 defaults.cache = defaults.cache ? \'\' : \'&\' + new Date().getTime() ;//处理 cache 49 50 if(defaults.method === \'GET\' && (defaults.data || defaults.cache)) defaults.url += \'?\' + defaults.data + defaults.cache; //处理 url 51 52 //四.开始编写ajax 53 //1.创建ajax对象 54 var oXhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject(\'Microsoft.XMLHTTP\'); 55 //2.和服务器建立联系,告诉服务器你要取什么文件 56 oXhr.open(defaults.method, defaults.url, defaults.async); 57 //3.发送请求 58 if(defaults.method === \'GET\') 59 oXhr.send(null); 60 else{ 61 oXhr.setRequestHeader("Content-type", defaults.contentType); 62 oXhr.send(defaults.data); 63 } 64 //4.等待服务器回应 65 oXhr.onreadystatechange = function (){ 66 if(oXhr.readyState === 4){ 67 if(oXhr.status === 200) 68 defaults.success.call(oXhr, oXhr.responseText); 69 else{ 70 defaults.error(); 71 } 72 } 73 }; 74 }

 

2、ajax函数调用:

 1 //调用ajax函数
 2 
 3 ajax({
 4  
 5    url: \'1.php\',
 6  
 7    data: {name: \'ivan\', sex: \'male\', age: \'23\'},
 8  
 9    success: function (data){ alert(\'返回数据是:\' + data); }
10  
11  });
12  
13  ajax({
14  
15    url: \'1.php\',
16  
17    data: \'name=ivan&sex=male&age=23\',
18  
19    cache: false,
20  
21    success: function (data){ alert(\'返回数据是:\' + data); }
22  
23  });

 转摘于:http://www.cnblogs.com/Ivangel/p/3825701.html?utm_source=tuicool&utm_medium=referral  感谢原作者

 

方法二:

1、ajax封装

 1 //ajax封装
 2 function Ajax(type, url, data, success, failed){
 3     // 创建ajax对象
 4     var xhr = null;
 5     if(window.XMLHttpRequest){
 6         xhr = new XMLHttpRequest();
 7     } else {
 8         xhr = new ActiveXObject(\'Microsoft.XMLHTTP\')
 9     }
10  
11     var type = type.toUpperCase();
12     // 用于清除缓存
13     var random = Math.random();
14  
15     if(typeof data == \'object\'){
16         var str = \'\';
17         for(var key in data){
18             str += key+\'=\'+data[key]+\'&\';
19         }
20         //method=get&url=
21         data = str.replace(/&$/, \'\');
22     }
23  
24     if(type == \'GET\'){
25         if(data){
26             xhr.open(\'GET\', url + \'?\' + data, true);
27         } else {
28             xhr.open(\'GET\', url + \'?t=\' + random, true);
29         }
30         xhr.send();
31  
32     } else if(type == \'POST\'){
33         xhr.open(\'POST\', url, true);
34         // 如果需要像 html 表单那样 POST 数据,请使用 setRequestHeader() 来添加 http 头。
35         xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
36         xhr.send(data);
37     }
38  
39     // 处理返回数据
40     xhr.onreadystatechange = function(){
41         if(xhr.readyState == 4){
42             if(xhr.status == 200){
43                 success(xhr.responseText);
44             } else {
45                 if(failed){
46                     failed(xhr.status);
47                 }
48             }
49         }
50     }
51 }

 

2、ajax调用

1 //调用
2 Ajax(\'get\',\'check.php\',sendData,function(data) {}

 

3、ajax注册例子如下

  1 //例子
  2 
  3 <!DOCTYPE html>
  4 <html>
  5     <head>
  6         <meta charset="utf-8" />
  7         <title>ajax注册</title>
  8     </head>
  9     <body>
 10         <form method="post" action="http://www.mytest.com/ajax-09.php" onsubmit="return checkform();">
 11     
 12             用户名:<input type="text" name="username" id="username" onfocus="clearTips()" onblur="checkName();" />
 13             <br/><br/>
 14 
 15             密&nbsp;&nbsp;码:<input type="password" name="userpass1" id="userpass1" onblur="checkPassFirst();" onfocus="clearTips();"/>
 16             <br/><br/>
 17 
 18             确认密码:<input type="password" name="userpass2" id="userpass2" onblur="checkPass();" onfocus="clearTips();" />
 19             <br/><br/>
 20 
 21             邮箱:<input type="text" name="useremail" id="useremail" onblur="checkEmail();" onfocus="clearTips();" />
 22             <br/><br/>
 23 
 24             手机:<input type="text" name="usermobile" id="usermobile" onfocus="clearTips();" onblur="checkMobile();"/><input type="button" value="获取手机验证码" id="mobilebtn" style="display:none;"  onclick="getMobileCode();"/>
 25             <br/><br/>
 26 
 27             验证码:<input type="text" name="vcode" id="vcode" onblur="checkCode();" onfocus="clearTips();"/>
 28             <img id="code" src="http://www.mytest.com/ajax/code.php" style="width:80;height:24px;border:0;" onclick="changeCode();"/>
 29             <br/><br/>
 30 
 31             <p style="clear:both;width:500px;color:red;display:none;" id="tips" error=""> </p>
 32             <input type="submit" value="注册" id="submit"/> 
 33       </form>
 34 <script>
 35 function checkform() {
 36     var name = document.getElementById(\'username\').value;
 37     if (name.length <= 0) {
 38         showTips(\'用户名不能为空\');
 39         return false;
 40     }
 41 
 42     var pass = document.getElementById(\'userpass1\').value;
 43     if (pass.length <= 0) {
 44         showTips(\'密码不能为空\');
 45         return false;
 46     }
 47 
 48     var pass2 = document.getElementById(\'userpass2\').value;
 49     if (pass2.length <= 0) {
 50         showTips(\'确认密码不能为空\');
 51         return false;
 52     }
 53 
 54     if (pass != pass2) {
 55         showTips(\'两次密码输入不一致\');
 56         return false;
 57     }
 58 
 59     var email = document.getElementById(\'useremail\').value;
 60     if (email.length <= 0) {
 61         showTips(\'邮箱不能为空\');
 62         return false;
 63     }
 64     var emailReg = /^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$/; 
 65     if( !emailReg.test(email) ){ 
 66         showTips(\'邮箱输入有误,请重新输入\')
 67         return false; 
 68     } 
 69 
 70     var mobile = document.getElementById(\'usermobile\').value;
 71     if (mobile.length <= 0) {
 72         showTips(\'手机号不能为空\');
 73         return false;
 74     }
 75 
 76     var regu =/^[1][3|4|5|8][0-9]{9}$/gi; 
 77     var re = new RegExp(regu); 
 78     if (!re.test(mobile)) { 
 79         showTips(\'手机号输入有误,请重新输入\')
 80         return false; 
 81     } 
 82 
 83     var code = document.getElementById(\'vcode\').value;
 84     if (code.length <= 0) {
 85         showTips(\'验证码不能为空\');     
 86         return false;
 87     }
 88 
 89     return true;
 90 }
 91 
 92 function clearTips(){
 93     document.getElementById(\'tips\').style.display = "none";
 94     document.getElementById(\'tips\').innerHTML = \'\';
 95     document.getElementById(\'submit\').disabled = false;
 96 }
 97 
 98 function showTips(msg){
 99     tipObj = document.getElementById(\'tips\');
100     tipObj.style.display = "block";
101     tipObj.innerHTML = msg;
102     document.getElementById(\'submit\').disabled = true;
103 }
104 
105 function loading(){
106     tipObj = document.getElementById(\'tips\');
107     tipObj.style.display = "block";
108     tipObj.innerHTML = \'加载中...\';
109 }
110 
111 function removeLoading(){
112     tipObj = document.getElementById(\'tips\');
113     tipObj.innerHTML = \'\';
114     tipObj.style.display = "none";
115 }
116 
117 function checkName(){
118     var name = document.getElementById(\'username\').value;
119     if(isNull(name)) {
120         showTips(\'请输入用户名\');    
121     }
122     loading();
123     var sendData = {username:name,action:\'checkname\'};
124     Ajax(\'get\',\'check.php\',sendData,function(data) {
125         removeLoading(); 
126         var user = eval(\'(\'+data+\')\')
127         if (user.id) {
128             showTips(\'用户名已被占用,请重新输入用户名\');    
129         }
130         }, function(data){
131             
132             showTips(\'ajax请求错误\');    
133         });
134 
135 }
136 
137 function checkEmail(strEmail) { 
138     var strEmail = document.getElementById(\'useremail\');
139     var emailReg = /^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$/; 
140     if( !emailReg.test(strEmail.value) ){ 
141         showTips(\'邮箱输入有误,请重新输入\')
142         return false; 
143     } 
144 } 
145 
146 function changeCode(){
147    var url = document.getElementById(\'code\').src ;
148    var rand = Math.floor(Math.random() * ( 1000 + 1));
149    url += \'?\' +  rand;
150    document.getElementById(\'code\').src  = url;
151 }
152  
153 function checkMobile(s){   
154     var obj = document.getElementById(\'usermobile\');
155     var regu =/^[1][3|4|5|8][0-9]{9}$/gi; 
156     var re = new RegExp(regu); 
157     if (!re.test(obj.value)) { 
158         showTips(\'手机号输入有误,请重新输入\')
159 
160         var obj = document.getElementById(\'mobilebtn\');
161         obj.style.display = \'none\';
162         obj.disabled = true;
163         return false; 
164     } 
165     var obj = document.getElementById(\'mobilebtn\');
166     obj.style.display = \'block\';
以上是关于原生js封装ajax代码的主要内容,如果未能解决你的问题,请参考以下文章

原生js 封装ajax请求超详细

城市三级联动 AJAX-原生js封装

原生js封装Ajax的GET请求

关于原生ajax请求及其封装

原生ajax 方法封装

原生JS封装AJAX