关于Ajax的封装方法

一、封装ajax

封装ajax,可直接复制引用

ajax.js

function sendAjax(obj){/ 先判断url是否传入

if(!obj.url){

/ 没有传

throw new Error('地址必填') / 抛出自定义错误

}

/ 传入了之后需要验证url是否是字符串

if(Object.prototype.toString.call(obj.url) !== '[object String]'){

throw new Error('地址必须是字符串')

}

/ 判断请求方式是否传入

if(!obj.method){

obj.method = 'get'

}

/ 传入了 - 验证是否是get或post

if(obj.method.toLowerCase()!=='get' && obj.method.toLowerCase()!=='post'){

throw new Error('请求方式必须是get或post')

}

/ 判断async是否传入

if(obj.async === undefined){

obj.async = true

}

/ 判断类型

if(Object.prototype.toString.call(obj.async) !== '[object Boolean]'){

throw new Error('async必须是布尔值')

}

/ 判断是否传入success

if(!obj.success){

obj.success = function(){}

}

/ 判断是否是函数

if(Object.prototype.toString.call(obj.success) !== '[object Function]'){

throw new Error('success必须是函数')

}

if(!obj.error){

obj.error = function(){}

}

if(Object.prototype.toString.call(obj.error) !== '[object Function]'){

throw new Error('error必须是函数')

}

/ 判断数据是否传入

var str = '';

if(obj.data){

/ 判断类型

if(Object.prototype.toString.call(obj.data) === '[object String]'){

str = obj.data

}else if(Object.prototype.toString.call(obj.data) === '[object Object]'){

/ 对象要处理成字符串

var f = '';

for(var attr in obj.data){

str += f + attr + '=' + obj.data[attr]

f = '&'

}

}else{

throw new Error('非法数据')

}

/ 如果是get请求,需要将数据拼接在地址后

if(obj.method.toLowerCase() === 'get'){

obj.url += '?' + str

}

}

/ 判断希望请求回来的数据格式

if(!obj.dataType){

obj.dataType = 'json'

}

/ 如果传了

if(obj.dataType.toLowerCase()!=='json' && obj.dataType.toLowerCase()!=='text' && obj.dataType.toLowerCase()!=='xml'){

throw new Error('dataType非法')

}

/*

{

url:'',

method:'',

data:'',

async:'',

success:function(){},

error:'',

dataType:'text/json/xml'

}

*/

var xhr = new XMLHttpRequest;

xhr.onreadystatechange = function(){

if(xhr.readyState === 4){

if(parseInt(xhr.status/100) === 2){

/ 确定要不要转对象

switch(obj.dataType.toLowerCase()){

case 'json':

var res = xhr.responseText;

res = JSON.parse(res)

break;

case 'xml':

var res = xhr.responseXML;

break;

case 'text':

var res = xhr.responseText;

break;

}

obj.success(res)

}else{

obj.error()

}

}

}

xhr.open(obj.method,obj.url,obj.async)

if(obj.method.toLowerCase() === 'post' && obj.data){

/ 设置请求头

xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')

xhr.send(str)

return

}

xhr.send()

}

function promiseAjax(obj){return new Promise(function(resolve,reject){

/ 先判断url是否传入

if(!obj.url){

// 没有传

throw new Error('地址必填') /抛出自定义错误

}

/传入了之后需要验证url是否是字符串

if(Object.prototype.toString.call(obj.url) !== '[object String]'){

throw new Error('地址必须是字符串')

}

/ 判断请求方式是否传入

if(!obj.method){

obj.method = 'get'

}

/ 传入了 - 验证是否是get或post

if(obj.method.toLowerCase()!=='get' && obj.method.toLowerCase()!=='post'){

throw new Error('请求方式必须是get或post')

}

/ 判断async是否传入

if(obj.async === undefined){

obj.async = true

}

/ 判断类型

if(Object.prototype.toString.call(obj.async) !== '[object Boolean]'){

throw new Error('async必须是布尔值')

}

/ 判断数据是否传入

var str = '';

if(obj.data){

/ 判断类型

if(Object.prototype.toString.call(obj.data) === '[object String]'){

str = obj.data

}else if(Object.prototype.toString.call(obj.data) === '[object Object]'){

/ 对象要处理成字符串

var f = '';

for(var attr in obj.data){

str += f + attr + '=' + obj.data[attr]

f = '&'

}

}else{

throw new Error('非法数据')

}

/ 如果是get请求,需要将数据拼接在地址后

if(obj.method.toLowerCase() === 'get'){

obj.url += '?' + str

}

}

/ 判断希望请求回来的数据格式

if(!obj.dataType){

obj.dataType = 'json'

}

/ 如果传了

if(obj.dataType.toLowerCase()!=='json' && obj.dataType.toLowerCase()!=='text' && obj.dataType.toLowerCase()!=='xml'){

throw new Error('dataType非法')

}

/*

{

url:'',

method:'',

data:'',

async:'',

success:function(){},

error:'',

dataType:'text/json/xml'

}

*/

var xhr = new XMLHttpRequest;

xhr.onreadystatechange = function(){

if(xhr.readyState === 4){

if(parseInt(xhr.status/100) === 2){

/ 确定要不要转对象

switch(obj.dataType.toLowerCase()){

case 'json':

var res = xhr.responseText;

res = JSON.parse(res)

break;

case 'xml':

var res = xhr.responseXML;

break;

case 'text':

var res = xhr.responseText;

break;

}

resolve(res)

}else{

reject()

}

}

}

xhr.open(obj.method,obj.url,obj.async)

if(obj.method.toLowerCase() === 'post' && obj.data){

/ 设置请求头

xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')

xhr.send(str)

return

}

xhr.send()

})

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值