首頁 >web前端 >js教程 >以ajax二次封裝jquery實例詳解

以ajax二次封裝jquery實例詳解

小云云
小云云原創
2017-12-19 13:38:582244瀏覽

本文主要和大家介紹用ajax二次封裝jquery實例,Ajax 的全名是Asynchronous JavaScript and XML 異步的javaScript和XML,下面這篇文章主要給大家介紹了關於二次封裝jquery ajax辦法示例,文中通過範例程式碼介紹的非常詳細,需要的朋友們下面來一起看看吧。

前言

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

中間件

#這是一個公共的辦法,但是有時我們需要處理差異化啊, 我們參考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
  });
 });
}

// 调用
// 调用
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)
 })

相關推薦:

對jquery的ajax進行二次封裝以及ajax快取代理元件:AjaxCache詳解_jquery

JavaScript模擬三種方式實作封裝及區別介紹

#JS封裝運動框架的一種寫法

以上是以ajax二次封裝jquery實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn