欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于二次封裝jquery ajax辦法示例詳解

 更新時間:2017年07月14日 08:41:48   作者:combine  
Ajax 的全稱是Asynchronous JavaScript and XML 異步的javaScript和XML,下面這篇文章主要給大家介紹了關(guān)于二次封裝jquery ajax辦法示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面來一起看看吧。

前言

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

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

       1.使用CSS和XHTML來表示。

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

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

       4.使用javascript來綁定和調(diào)用。

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

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

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

痛點

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

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

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

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

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

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

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ù)錯誤的判斷啦。 我們再來完善下, 不使用回調(diào)的方式,使用 promise 的方式調(diào)用, 減少回調(diào),讓代碼更清晰。

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)
 });
}


// 調(diào)用
var obj = {
 url: '/interface',
 data: {
  interface_name: 'name',
  interface_params: JSON.stringify({})
 }
};
util.ajax(obj)
 .done(function(data){
  dosomething(data)
 })

中間件

這是一個公共的辦法,但是有時候我們需要處理差異化啊, 我們參考 express 引入一個中間件來解決差異化問題。

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
  });
 });
}

// 調(diào)用
// 調(diào)用
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)
 })

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Ajax異步請求JSon數(shù)據(jù)(圖文詳解)

    Ajax異步請求JSon數(shù)據(jù)(圖文詳解)

    在編程過程中使用ajax調(diào)用數(shù)據(jù)的時候,難免要進(jìn)行邏輯的處理,接受的數(shù)據(jù)也變的復(fù)雜比如數(shù)組類型的數(shù)據(jù),這時候就需要使用JSON數(shù)據(jù)類型進(jìn)行處理,通過本篇文章給大家介紹Ajax異步請求json數(shù)據(jù),需要的朋友可以參考下本文
    2015-09-09
  • AJAX提交與FORM提交的區(qū)別說明

    AJAX提交與FORM提交的區(qū)別說明

    本篇文章主要是對AJAX提交與FORM提交的區(qū)別進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02
  • 表單上傳功能實現(xiàn) ajax文件異步上傳

    表單上傳功能實現(xiàn) ajax文件異步上傳

    這篇文章主要為大家詳細(xì)介紹了表單上傳功能和文件上傳功能實現(xiàn),ajax文件異步上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • django使用ajax post數(shù)據(jù)出現(xiàn)403錯誤如何解決

    django使用ajax post數(shù)據(jù)出現(xiàn)403錯誤如何解決

    在django中,使用jquery ajax post數(shù)據(jù),會出現(xiàn)403的錯誤,該如何解決呢?下面由腳本之家小編幫大家解決django使用ajax post數(shù)據(jù)出現(xiàn)403錯誤,需要的朋友可以參考下
    2015-09-09
  • AJAX的跨域問題解決方案

    AJAX的跨域問題解決方案

    跨域簡單的說,就是從一個域名的網(wǎng)頁去訪問另一個域名網(wǎng)頁的資源,下面這篇文章主要給大家介紹了關(guān)于AJAX的跨域問題解決的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • 分享Ajax創(chuàng)建簡單實例代碼

    分享Ajax創(chuàng)建簡單實例代碼

    這篇文章主要為大家分享了Ajax創(chuàng)建簡單實例代碼,學(xué)習(xí)Ajax如何創(chuàng)建簡單實例,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 利用Ajax實現(xiàn)在腳本里傳值實例介紹

    利用Ajax實現(xiàn)在腳本里傳值實例介紹

    Ajax實現(xiàn)在腳本里傳值可以解決實際上的一些問題,本文實現(xiàn)了一下,感興趣的朋友可以參考下,希望可以幫助到你
    2013-04-04
  • Ajax校驗是否重復(fù)的實現(xiàn)代碼

    Ajax校驗是否重復(fù)的實現(xiàn)代碼

    這篇文章主要介紹了Ajax校驗是否重復(fù)的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • Ajax 傳遞JSON實例代碼

    Ajax 傳遞JSON實例代碼

    雖然ajax全稱是asynchronous javascript and XML。但目前使用ajax技術(shù)時,傳遞JSON已經(jīng)成為事實上的標(biāo)準(zhǔn)。這篇文章主要介紹了Ajax 傳遞JSON實例代碼,需要的朋友可以參考下
    2017-03-03
  • 使用Ajax實現(xiàn)簡單的帶百分比進(jìn)度條實例

    使用Ajax實現(xiàn)簡單的帶百分比進(jìn)度條實例

    最近做項目遇到這樣的需求要求當(dāng)進(jìn)行文件長傳保存等操作時,能在頁面顯示一個帶百分比的進(jìn)度條,給用戶一個好的交互體驗,下面通過實例代碼給大家介紹基于ajax實現(xiàn)帶百分比進(jìn)度條效果,需要的的朋友參考下吧
    2017-07-07

最新評論