首页前端开发其他前端知识基于jQuery的ajax封装怎么现实

基于jQuery的ajax封装怎么现实

时间2024-03-28 09:14:03发布访客分类其他前端知识浏览510
导读:在实际案例的操作过程中,我们可能会遇到“基于jQuery的ajax封装怎么现实”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大家一起了解看看吧。...
在实际案例的操作过程中,我们可能会遇到“基于jQuery的ajax封装怎么现实”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大家一起了解看看吧。

ajax (ajax开发)简介

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。

AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

在实际的项目里,ajax的应用频率很高,所以尽管jquery或者其他的一些类似的js库做了非常不错的封装,仍然有进一步封装简化的空间和必要

举一个例子,很久很久以前,我的ajax是这么写的:

$.ajax({

url: 'www.baidu.com/getInfo',
type: 'POST',
data: {

name: 'jack',
age: 18
}
,
dataType: 'json',
success: function(resp){

// callback
}
,
error: function(err){

// error code
}
 
}
    );

乍一看挺好没啥问题,但是其实success回调里的逻辑可能很复杂,甚至可能会出现ajax回调里再放一个ajax的情况,那这种写法就很糟糕了,全都杂糅在一起

可以进行一个简单的封装,这在之前Deferred对象的随笔里已经有提到

function ajax(url, param, type) {

// 利用了jquery延迟对象回调的方式对ajax封装,使用done(),fail(),always()等方法进行链式回调操作
// 如果需要的参数更多,比如有跨域dataType需要设置为'jsonp'等等,可以考虑参数设置为对象
return $.ajax({

url: url,
data: param || {
}
,
type: type || 'GET'
}
    );

}

// 链式回调
ajax('www.baidu.com/getInfo').done(function(resp) {

// 成功回调
}
).fail(function(err) {

// 失败回调
}
    );

但是虽然做到这一步了,问题还是会来,比如我司,成功的回调里还有一层逻辑判断,像这样:

// 我司ajax返回的json数据格式
// 当result为false时,msg中往往有错误信息
{

result: true,
data: {

name: 'jack'
}
,
msg: null
}

ajax('www.baidu.com/getInfo').done(function(resp) {

// 成功回调
if(resp.result){

// 当resp中result为true时的操作
// 往往这个时候要操作处理resp中的data对象信息
}

else{

// 当result为false时的操作,这时往往会根据resp中的另一属性msg来判断具体处理
}

}
).fail(function(err) {

// 失败回调
}
    );

问题有二:

第一,我每个ajax中都需要写一个同样的相对固定的逻辑判断(每个公司或者项目组可能会有不同,但是就项目本身而言,或者放大了到公司来说必然是固定的),我觉得很烦。

第二,如果我只想专注处理数据,比如在成功回调里,我直接拿到要处理要渲染的数据,在失败的回调里我直接拿到错误的代码,有没有这样的可能做进一步的封装。

其实这俩问题是一个,总结一句话,就是不想写那么多if,else。有一句话我觉得说得很好,逻辑是守恒的,但如果是可预见的逻辑,是有精简的可能的,我们这种显然属于可预见的逻辑。

二次封装利用了延迟对象的then方法,具体看代码:

function handleAjax(url, param, type) {

return ajax(url, param, type).then(function(resp){

// 成功回调
if(resp.result){
    
return resp.data;
 // 直接返回要处理的数据,作为默认参数传入之后done()方法的回调
}

else{
    
return $.Deferred().reject(resp.msg);
 // 返回一个失败状态的deferred对象,把错误代码作为默认参数传入之后fail()方法的回调
}

}
, function(err){
    
// 失败回调
console.log(err.status);
 // 打印状态码
}
    );

}

handleAjax('www.baidu.com/getInfo').done(function(resp){

// 当result为true的回调
}
).fail(function(err){

// 当result为false的回调
}
    );
    

这就把之前很杂揉的代码进一步的的简化,也方便了维护,比如某一天跟你说result不再是布尔值了,直接改成状态码这样的东西了,如果按以前一个ajax写一个判断,简直要疯。


到此这篇关于“基于jQuery的ajax封装怎么现实”的文章就介绍到这了,感谢各位的阅读,更多相关基于jQuery的ajax封装怎么现实内容,欢迎关注网络资讯频道,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 基于jQuery的ajax封装怎么现实
本文地址: https://pptw.com/jishu/654842.html
Java创建多线程有哪些方法,实现步骤和代码是什么 Java装饰器模式优缺点是什么,怎么实现装饰器模式

游客 回复需填写必要信息