原生JS封装ajax方法

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4   <meta charset="utf-8">
 5   <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 6   <title>Examples</title>
10   <script>
11 
12     //将对象序列化
13     function params(data) {
14       var arg = [];
15       for (var i in data) {
16         arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(data[i]));
17       }
18       return arr.join('&');
19     }
20 
21     //封装ajax
22     function ajax(obj) {
23       //创建xhr对象;
24       obj.xhr = new XMLHttpRequest();
25       //后面随机数防止浏览器缓存
26       obj.url = url + "?rand=" + Math.random();
27       //序列化对象
28       obj.data = params(obj.data);
29       //当是get请求时
30       if (obj.method = 'get') {
31         //当前面没设置随机数时
32         obj.url += obj.url.indexOf('?') == -1 ? '?' +obj.data : '&' + obj.data;
33       }
34       //异步调用
35       if (obj.async == true) {
36         //监听响应状态
37         xhr.onreadystatechange = function() {
38           if (xhr.readyState == 4) {
39             callback();
40           }
41         };
42       }
43       //启动HTTP请求
44       xhr.open(obj.method, obj.url, obj.aysnc);
45       //当是post请求时
46       if(obj.method === 'post') {
47         //模仿表单提交
48         xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
49         //发送HTTP请求-post
50         xhr.send(obj.data);
51       } else {
52         //发送HTTP请求-get
53         xhr.send(null);
54       }
55       //同步调用
56       if (obj.async == false) {
57         callback();
58       }
59       //回调函数传参
60       function callback() {
61         if (xhr.atatus == 200) {
62           obj.success(xhr.responseText);
63         } else {
64           alert("失败,失败状态码:" + xhr.status);
65         }
66       }
67     }
68 
69     document.addEventListener('click', function() {
70       ajax({
71         method: 'get',
72         url: 'demo3.php',
73         data: {
74           'name' = 'Lee',
75           'age' = 100
76         },
77         success: function(text) {
78           alert(text);
79         },
80         async = true
81       });
82     }, false);
83   </script>
84 </head>
85 <body>
86     
87 </body>
88 </html>

 

posted @ 2017-04-03 00:01  陈泽创  阅读(7229)  评论(1编辑  收藏  举报