国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

二次封裝jquery ajax辦法的示例分析

發(fā)布時(shí)間:2021-07-27 11:48 來(lái)源:億速云 閱讀:0 作者:小新 欄目: web開(kāi)發(fā)

這篇文章主要介紹二次封裝jquery ajax辦法的示例分析,文中介紹的非常詳細,具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

前言

Ajax 的全稱(chēng)是Asynchronous JavaScript and XML 異步的javaScript和XML

AJax所涉及到得技術(shù):

       1.使用CSS和XHTML來(lái)表示。

       2. 使用DOM模型來(lái)交互和動(dòng)態(tài)顯示。

       3.使用XMLHttpRequest來(lái)和進(jìn)行異步通信。(核心)

       4.使用javascript來(lái)綁定和調用。

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

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

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

痛點(diǎn)

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

就是現在基本所有項目的 ajax 返回的數據也是進(jìn)行了二次封裝,加入了后臺在處理業(yè)務(wù)邏輯時(shí)的信息。

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

如果每一個(gè) ajax 請求回來(lái)都要判斷 code 是否正確再進(jìn)行業(yè)務(wù)邏輯處理或者報錯提醒, 整個(gè)項目下來(lái)也太冗余了,

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

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

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 使用就可以減少了業(yè)務(wù)錯誤的判斷啦。 我們再來(lái)完善下, 不使用回調的方式,使用 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)
 })

中間件

這是一個(gè)公共的辦法,但是有時(shí)候我們需要處理差異化啊, 我們參考 express 引入一個(gè)中間件來(lái)解決差異化問(wèn)題。

util.ajax = function(obj, middleware) {
 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('接口出錯,請重試');
 })

 // 添加中間件
 if(!middleware) {
  middleware = function(){};
 }
 return deferred.done(middleware).fail(function (err) {
  message({
   content: err,
   type: 'error',
   showLeftIcon: true,
   duration: 5000
  });
 });
}

// 調用
// 調用
var obj = {
 url: '/interface',
 data: {
  interface_name: 'name',
  interface_params: JSON.stringify({})
 }
};
var middleware = function(data) {
 data.forEach(function(item){
  item.fullName = item.firstName + item.lastName
 })
}
util.ajax(obj, middleware)
 .done(function(data){
  console.log(data.fullName)
 })

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

美女黄频视频大全免费的| 欧美A级毛欧美1级A大片| 超薄肉色丝袜一区二区| 丰满人妻熟妇乱又伦精品APP| 97超碰中文字幕久久精品| 久久人搡人人玩人妻精品首页|