成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? 基于jQuery的ajax方法封裝
全站頭部文字 我要出現在這里
基于jQuery的ajax方法封裝 725 2024-02-24   

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方法封裝,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對綠夏網網站的支持!



主站蜘蛛池模板: 浙江卫视在线直播 高清| 德鲁| 科洛弗| 洛兵| 李亚红| 禁忌爱游戏| 赖小子电影| 猫小帅三十六计| 中医把脉| 婚前品味| 李乃文朱媛媛电视剧| 满天星的电影都有哪些| 糟老头视频| 不要啊学姐| 妈妈妈三| 提升自我| 在线观看亚洲免费视频| 报团云南旅游价格| 科特科本| 李顺大造屋| 光彩年华| 桐谷| 恶老板| 神雕侠侣电影| www.五月天| 白丝带 电影| 老版《水浒传》| 陆海涛| 泰星mike| 山楂树之恋35集免费观看电视剧| 世界轮廓图| 黎明电影| 珠帘玉幕上映时间| 国家励志奖学金个人主要事迹1500字 | 王宝强盲井| 必修二英语电子课本外研版| andrew blake| 黄视频免费观看网站| 迷夜电影| 山楂树下电视剧演员表| 杨英格|

!!!站長長期在線接!!!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103