手动封装一个属于自己的AJAX类库
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>封装属于自己的AJAX类库</title>
</head>
<body>
<script>
    //自执行函数
    ~function(){
        class ajaxClass{
            //=>AJAX四步操作:send ajax
            init(){
                //这里的this就是实例example
                let xhr = new XMLHttpRequest();
                xhr.onreadystatechange = ()=>{
                    if(xhr.readyState===4&&/^(2|3)\d{2}$/.test(xhr.status)){
                        let result = xhr.responseText;
                        //dataType的处理
                        try {
                            switch (this.dataType.toUpperCase()){
                                case 'TEXT':
                                case 'HTML':
                                    break;
                                case 'JSON':
                                    result = JSON.parse(result);
                                    break;
                                case 'XML':
                                    result = xhr.responseXML;
                            }
                        }catch (e){
                            console.log(e.message);
                        }
                        this.success(result);
                    }
                }
                //=>data的处理
                if(this.data !==null){
                    this.formatData();
                    if(this.isGET){
                        //如果是get请求
                        this.url += this.querySymbol()+this.data;
                        this.data = null;
                    }
                }
                //=>cache的处理
                this.isGET?this.cacheFn():null;
                xhr.open(this.method,this.url,this.async);
                xhr.send(this.data);
            }
            //把传递的对象格式data转换为字符串格式类型
            formatData(){
                //this指向当前实例example
                //检测this.data是否是一个对象
                if({}.toString.call(this.data)==='[object Object]'){
                    let obj = this.data,
                            str = ``;
                    for(let key in obj){
                        str += `${key}=${obj[key]}&`;
                    }
                    str = str.replace(/&$/,'');//把末尾的&进行替换
                    this.data = str;
                }
            }
            cacheFn(){
                //this指向当前实例example
                !this.cache ?this.url +=`${this.querySymbol}_=${Math.random()}`:null;
            }
            //符号查询
            querySymbol(){
                //this孩纸指向当前实例example
                return this.url.indexOf('?')>-1?'&':'?';
            }
        }
        //=>参数初始化 init parameters
        window.ajax = function ({
                url=null,
                method='GET',
                type=null,
                data=null,
                dataType='JSON',
                cache=true,
                async=true,
                success=null
                }={}) {
            let example = new ajaxClass();//example就是ajaxClass的实例
            /*['url','method','data','dataType','cache','async','success'].forEach((item)=>{
                if(item==='method'){
                _this.method = type===null?method:type;
                return;
            }if(item === 'success'){
                _this.success = typeof success === 'function'?success:new Function();
                return;
            }
                _this[item] = eval(item);
            })*/
            example.url = url;
            example.method = type===null?method:type;
            example.data = data;
            example.dataType = dataType;
            example.async = async;
            example.success = typeof success === 'function'?success:new Function();
            example.isGET = /^(GET|DELETE|HEAD)$/i.test(example.method);
            example.init();//执行init方法
            return example;
        };
    }();
    ajax({
        url:'product.json',
        method:'post',
        cache:false,
        data:{
            name:'zhangsan',
            age:18
        },
        dataType:'text',
        success: result=>{
                console.log(result);
            }
    })
</script>
</body>
</html>
												
											手动封装一个属于自己的AJAX类库的更多相关文章
- 封装一个类似jquery的ajax方法
		
//封装一个类似jquery的ajax方法,当传入参数,就可以发送ajax请求 //参数格式如下{ // type:"get"/"post", // dataT ...
 - 手动封装一个node命令集工具
		
了解NPM安装模块时与项目配置文件中的bin配置发生了什么 了解nodejs在控制台中的运行环境及上下文 基于自定义命令集工具集成Yeoman 一.NPM模块安装内幕与nodejs控制台运行环境 1. ...
 - 手动模拟一个类似jquery的ajax请求
		
var $ = { parms:function(obj){ var str = ''; for(var k in obj){ str +=k+'='+obj[k]+'&'; } str = ...
 - 封装一个简易版的ajax操作对象
		
/** * 发送ajax请求 * @type {Object} * 使用方法如下: * $ajax.request( * method: "post", //请求方式 * url: ...
 - 【react】---手动封装一个简易版的redux
		
export let createStore = (reducer)=>{ //定义默认的state let state; //定义默认的action let actionTypes = &qu ...
 - 【react】---手动封装一个简易版的redux---【巷子】
		
export let createStore = (reducer)=>{ //定义默认的state let state = {}; //定义默认的action let actionTypes ...
 - 使用promise手动封装ajax函数
		
最近在做一个单页应用,node和浏览器仅通过json传输数据,因为是只有自己用等于是锻炼一下自己,所以也不用考虑seo的问题,node端我已经写好了,但是浏览器端想要用ajax原生太麻烦,用封装的函数 ...
 - 手动封装AJAX
		
正常函数的调用 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
 - 封装一个Ajax工具函数
		
/*封装一个ajax工具函数*/ window.$ = {}; /*通过$定义一个ajax函数*/ /* * 1. type string 请求的方式 默认是get * 2. url ...
 
随机推荐
- jQuery 插件封装的方法
			
方式1.$.fn.xxx ==>针对元素添加方法: ;(function ($) { $.fn.myPlugin = function () { //你自己的插件代码 }; })(jQuer ...
 - C#操作GridView控件
			
GridView控件是一个visualStudio自带的数据控件,它可以非常快速的将数据以表格方式显示在web页面上.下面就是一个利用GridView控件进行数据绑定的小例子,内容如下: 数据来源自一 ...
 - Mysql常用函数汇总-经典实用
			
以下是对mysql中的常用函数进行了汇总介绍.需要的朋友可以过来参考下. 一.数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x ...
 - Hydra初识
			
Hydra词出自希腊神话,原意是是九头蛇,后被赫拉克罗斯所杀,成为赫拉克罗斯的12件伟大功绩之一.而在计算机上HC-HYDRA是一个支持多种网络服务的非常快速的网络登陆破解工具.支持ssh,RDP,M ...
 - Shell的egrep、grep、fgrep命令的使用
			
Linux egrep 命令用于在文件内查找指定的字符串.与grep-E使用语法及参数相似,不同点在于解读字符串的方法. 语法: egrep [范本模式] [文件或目录] 参数说明: [范本模式]:查 ...
 - antlr-2.7.6.jar的作用
			
项目中没有添加antlr-2.7.6.jar,hibernate不会执行hql语句 并且会报NoClassDefFoundError: antlr/ANTLRException错误
 - python 中的pipe
			
from multiprocessing import Process,Queue,Pipe import os def f(q): # q.send([42,None,'hello']) print ...
 - AngularJS 自定义指令directive 介绍
			
--------------------------------------------------------------------------- 指令的作用是把我们自定义的语义化标签替换成浏览器 ...
 - 改变random.seed()种子值,获取不同的随机值
			
random.seed() random.seed()是随机数种子,也就是为随机数提供算法,完全相同的种子产生的随机数列是相同的, 所以如果想产生不同的随机数就需要用当前时间作为种子 一般情况下see ...
 - 关于RAM与ROM的区别与理解
			
随机存取存储器(random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存).它可以随时读写,而且速度很快,通常作为操作系统或其他正在运 ...