国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > AJAX > 正文

關于二次封裝jquery ajax辦法示例詳解

2024-09-01 08:27:08
字體:
來源:轉載
供稿:網友

前言

Ajax 的全稱是Asynchronous JavaScript and XML 異步的javaScript和XML

AJax所涉及到得技術:

       1.使用CSS和XHTML來表示。

       2. 使用DOM模型來交互和動態顯示。

       3.使用XMLHttpRequest來和服務器進行異步通信。(核心)

       4.使用javascript來綁定和調用。

在我們前端處理數據的時候免不了要 ajax 與后臺通信, ajax 是通過 XMLHttpRequest 對象與服務器進行通信的, jquery 在 XMLHttpReaquest 的基礎上封裝了 $.ajax 辦法進行通信, $.ajax 辦法實用性非常強,又非常簡單易用。 本次二次封裝 query ajax,參考 express 可以添加中間件處理數據,返回 Promise(Defferd) 對象,減少回調, 寫 ajax 更加簡潔、優雅。

$.ajax({ url: url, data: data, dataType: 'json', type: 'get', success: new Function(){}, error: new Function(){}, .......})

大部分的時候我們只需要傳入 url 和 data, 就可以獲取到我們想到的數據了。

痛點

但是在項目中使用 $.ajax, 它還是有一些痛點的

就是現在基本所有項目的 ajax 返回的數據也是進行了二次封裝,加入了后臺在處理業務邏輯時的信息。

從返回 data, 變成 了 {code: 200, data:{}, err_msg:''}

如果每一個 ajax 請求回來都要判斷 code 是否正確再進行業務邏輯處理或者報錯提醒, 整個項目下來也太冗余了,

$.ajax({ url: url, data: data, success: function(data){ if(data.code == 200) {  dosomething() } else { alert(data.err_msg); } }})

為了解決這個問題,我們用一個函數再次封裝 $.ajax, 把這種正確與否判斷再處理業務邏輯或者報錯提醒提取出來做成公共的部分。

util.ajax = function(obj, successFn){ $.ajax({ url: obj.url || '/interface', data: obj.data || {}, dataType: obj.dataType || 'json', type: obj.type || 'get', success: function(data){  if (data.code != 200) {  alert(data.err_msg);  } else {  successFn(data.data)  } }, error: function(err){  alert(err) } })}

promise

util.ajax 代替 $.ajax 使用就可以減少了業務錯誤的判斷啦。 我們再來完善下, 不使用回調的方式,使用 promise 的方式調用, 減少回調,讓代碼更清晰。

util.ajax = function(obj) { var deferred = $.Deferred(); $.ajax({  url: obj.url || '/interface',  data: obj.data || {},  dataType: obj.dataType || 'json',  type: obj.type || 'get', }).success(function (data) {  if (data.code != 200) {   deferred.reject(data.err_msg);  } else {   deferred.resolve(data.data)  } }).error(function (err) {  deferred.reject('接口出錯,請重試'); }) return deferred.fail(function (err) {  alert(err) });}// 調用var obj = { url: '/interface', data: {  interface_name: 'name',  interface_params: JSON.stringify({}) }};util.ajax(obj) .done(function(data){  dosomething(data) })            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汾西县| 府谷县| 渭源县| 武安市| 屯昌县| 兴和县| 会宁县| 肇州县| 江永县| 安化县| 中阳县| 陵川县| 静海县| 札达县| 泰兴市| 岱山县| 昌图县| 社会| 黄龙县| 江北区| 安图县| 军事| 麟游县| 安福县| 防城港市| 库尔勒市| 隆尧县| 遵化市| 黎城县| 凤山市| 祥云县| 渝中区| 黎川县| 抚顺市| 花莲县| 亳州市| 得荣县| 富蕴县| 涿州市| 手游| 青海省|