第110天:Ajax原生js封装函数

简介: 一、Ajax的实现主要分为四部分:1、创建Ajax对象1 // 创建ajax对象2 var xhr = null;3 if(window.XMLHttpRequest){4 xhr = new XMLHttpRequest();5 } else {6 //为了兼容IE67 xhr = new ActiveXObject('Microsoft.

一、Ajax的实现主要分为四部分:

1、创建Ajax对象

1 // 创建ajax对象
2 var xhr = null;
3 if(window.XMLHttpRequest){
4     xhr = new XMLHttpRequest();
5 } else {
6     //为了兼容IE6
7     xhr = new ActiveXObject('Microsoft.XMLHTTP');
8 }

2、连接服务器

// 连接服务器open(方法GET/POST,请求地址, 异步传输)
xhr.open('GET',  'data.txt',  true);

3、发送请求

// 发送请求
xhr.send();

4、接收返回数据

 1 // 处理返回数据
 2 /*
 3 ** 每当readyState改变时,就会触发onreadystatechange事件
 4 ** readyState属性存储有XMLHttpRequest的状态信息
 5 ** 0 :请求未初始化
 6 ** 1 :服务器连接已建立
 7 ** 2 :请求已接受
 8 ** 3 : 请求处理中
 9 ** 4 :请求已完成,且相应就绪
10 */
11 xhr.onreadystatechange = function(){
12     if(xhr.readyState == 4){
13         /*
14         ** Http状态码
15         ** 1xx :信息展示
16         ** 2xx :成功
17         ** 3xx :重定向
18         ** 4xx : 客户端错误
19         ** 5xx :服务器端错误
20         */
21         if(xhr.status == 200){
22             success(xhr.responseText);
23         } else {
24             if(failed){
25                 failed(xhr.status);
26             }
27         }
28     }
29 }

二、Ajax封装函数:

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

 

相关文章
|
10天前
|
JavaScript 前端开发 容器
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
14 0
|
15天前
|
JavaScript
变量和函数提升(js的问题)
变量和函数提升(js的问题)
|
15天前
|
JavaScript
常见函数的4种类型(js的问题)
常见函数的4种类型(js的问题)
10 0
|
16天前
|
JavaScript
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
9 0
|
27天前
|
自然语言处理 JavaScript 网络架构
js开发:请解释什么是ES6的箭头函数,以及它与传统函数的区别。
ES6的箭头函数以`=>`定义,简化了函数写法,具有简洁语法和词法作用域的`this`。它无`arguments`对象,不能用作构造函数,不支持`Generator`,且不改变`this`、`super`、`new.target`绑定。适用于简短表达式,常用于异步编程和高阶函数。
17 5
|
1月前
|
JavaScript 前端开发 网络架构
JavaScript 谈谈对箭头函数的理解及其与普通函数的区别。
JavaScript 谈谈对箭头函数的理解及其与普通函数的区别。
17 1
|
1月前
|
前端开发 JavaScript 数据处理
在JavaScript中,什么是异步函数执行的例子
在JavaScript中,什么是异步函数执行的例子
10 0
|
1月前
|
JavaScript
JS封装节流函数
JS封装节流函数
15 0
|
1月前
|
JavaScript 前端开发
javascript箭头函数
javascript箭头函数
|
1月前
|
JavaScript 前端开发
JavaScript函数科里化
JavaScript函数科里化