博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ajax四,封装ajax并优化
阅读量:7097 次
发布时间:2019-06-28

本文共 4244 字,大约阅读时间需要 14 分钟。

先封装一个属于自己的ajax方法

function myAjax(type,url,params,dataType,callback,async){        var xhr = new XMLHttpRequest()        if(type == 'get'){            if(params && params != ''){                url = url + '?' + params            }        }        xhr.open(type,url,true)        if(type == 'post'){            xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')            xhr.send(params)        }else if(type == 'get'){            xhr.send(null)        }        if(async){            xhr.onreadystatechange = function(){                if(xhr.readyState == 4){                    if(xhr.status == 200){                        var result = null                        if(dataType == 'json'){                            result = xhr.responseText                            result = JSON.parse(result)                        }else if(dataType == 'xml'){                            result = xhr.responseXML                        }else{                            result = xhr.responseText                        }                        callback && callback(result)                    }                }            }        }else{            if(xhr.readyState == 4){                if(xhr.status == 200){                    var result = null                    if(dataType == 'json'){                        result = xhr.responseText                        result = JSON.parse(result)                    }else if(dataType == 'xml'){                        result = xhr.responseXML                    }else{                        result = xhr.responseText                    }                    callback && callback(result)                }            }        }    }

这样封装的函数存在缺点,参数太多,顺序会乱,有一些常用的属性可以没必要去传

所以我们可以这样封装

var obj = {        type:'get',        url:'url',        data:{            xxx:xxx        },        dataType:'json',        success:function(result){        }    }    function myAjax(obj){        var defaults = {            type:'get',            url:'url',            data:{                xxx:xxx            },            dataType:'json',            success:function(result){            },            async:true        }        for(var k in obj){            defaults[k] = obj[k]        }        var xhr = new XMLHttpRequest()        var params = ''        for(var attr in defaults.data){            params += attr + '=' + defaults.data[attr] + '&'        }        if(params){            params = params.substring(0,params.length-1)        }        if(defaults.type == 'get'){            if(params && params != ''){                defaults.url += '?' + params            }        }        xhr.open(defaults.type,defaults.url,defaults.async)        if(defaults.type == 'post'){            xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')            xhr.send(params)        }else if(defaults.type == 'get'){            xhr.send(null)        }        if(defaults.async){            xhr.onreadystatechange = function(){                if(xhr.readyState == 4){                    if(xhr.status == 200){                        var result = null                        if(defaults.dataType == 'json'){                            result = xhr.responseText                            result = JSON.parse(result)                        }else if(defaults.dataType == 'xml'){                            result = xhr.responseXML                        }else{                            result = xhr.responseText                        }                        defaults.success && defaults.success(result)                    }                }            }        }else{            if(xhr.readyState == 4){                if(xhr.status == 200){                    var result = null                    if(defaults.dataType == 'json'){                        result = xhr.responseText                        result = JSON.parse(result)                    }else if(defaults.dataType == 'xml'){                        result = xhr.responseXML                    }else{                        result = xhr.responseText                    }                    defaults.success && defaults.success(result)                }            }        }    }

转载于:https://www.cnblogs.com/xufeng1994/p/10447562.html

你可能感兴趣的文章
【BZOJ】4753: [Jsoi2016]最佳团体 01分数规划+树上背包
查看>>
iOS 获取设备信息之UIDevice的使用,Swift 基于 API
查看>>
IntelliJ cannot log in to GitHub上传github报错解决
查看>>
MySQL强制性操作
查看>>
timestamp与timedelta,管理信息系统概念与基础
查看>>
重写对象ToString方法
查看>>
备忘: C++中的 vector 容器
查看>>
smt中查看图片与视频缩略图中,如何获得小视频的长度。
查看>>
图片(img标签)的onerror事件
查看>>
2013应届毕业生“百度”校招应聘总结
查看>>
CentOS系统启动流程
查看>>
myEclipse的Aptana studio插件安装时出现Error opening the editor.
查看>>
Mysql 知识(1)
查看>>
根据不同选择显示不同单价的逻辑
查看>>
“整个场面我Hold住!”软件测试计划
查看>>
利用SmtpClient发送邮件
查看>>
线性表练习题1
查看>>
C# 面试题大全
查看>>
「THUPC2018」赛艇 / Citing
查看>>
linux shell 命令学习(4) cut - remove sections from each line of files
查看>>