国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

二次封裝 query ajax 辦法

zr_hebo / 2334人閱讀

摘要:本次二次封裝,參考可以添加中間件處理數(shù)據(jù),返回對(duì)象,減少回調(diào),寫(xiě)更加簡(jiǎn)潔優(yōu)雅。痛點(diǎn)但是在項(xiàng)目中使用它還是有一些痛點(diǎn)的就是現(xiàn)在基本所有項(xiàng)目的返回的數(shù)據(jù)也是進(jìn)行了二次封裝,加入了后臺(tái)在處理業(yè)務(wù)邏輯時(shí)的信息。

前言

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

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

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

痛點(diǎn)

但是在項(xiàng)目中使用 $.ajax, 它還是有一些痛點(diǎn)的
就是現(xiàn)在基本所有項(xiàng)目的 ajax 返回的數(shù)據(jù)也是進(jìn)行了二次封裝,加入了后臺(tái)在處理業(yè)務(wù)邏輯時(shí)的信息。

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

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

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

為了解決這個(gè)問(wèn)題,我們用一個(gè)函數(shù)再次封裝 $.ajax, 把這種正確與否判斷再處理業(yè)務(wù)邏輯或者報(bào)錯(cuò)提醒提取出來(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ù)錯(cuò)誤的判斷啦。 我們?cè)賮?lái)完善下, 不使用回調(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("接口出錯(cuò),請(qǐng)重試");
    })
    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)
    })
中間件

這是一個(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("接口出錯(cuò),請(qǐng)重試");
    })

    // 添加中間件
    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)
    }).always(function(){})

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/83822.html

相關(guān)文章

  • vue 模仿今日頭條demo

    vue 頭條 demo 寫(xiě)在前面 總結(jié)一下寫(xiě) demo 過(guò)程中 遇到的一些問(wèn)題,方便自己的學(xué)習(xí)總結(jié)!如有錯(cuò)誤,還請(qǐng)指正! 一直想學(xué)習(xí)使用 vue ,并準(zhǔn)備以后在實(shí)際項(xiàng)目使用,之前跟著慕課網(wǎng) 黃軼 老師 敲了一下 餓了么商品購(gòu)買(mǎi)頁(yè)的demoele效果預(yù)覽 該 demo 借鑒自 hcy1996-github 這個(gè)項(xiàng)目,但內(nèi)部?jī)?nèi)容,布局風(fēng)格,完全不同,只為共同學(xué)習(xí),共同交流 數(shù)據(jù)接口 直接打開(kāi) 今日...

    simpleapples 評(píng)論0 收藏0
  • Ajax局部頁(yè)面刷新和History API結(jié)合的陷阱

    摘要:對(duì)于那些老網(wǎng)站或者老項(xiàng)目來(lái)說(shuō)全盤(pán)改造成并不現(xiàn)實(shí),于是就有了局部頁(yè)面刷新這個(gè)解決方案。如果不知道局部頁(yè)面刷新是何物請(qǐng)看這里,這里和這里。但實(shí)際上,第一次后退無(wú)法還原的內(nèi)容陷阱,第二次后退頁(yè)面刷新了一切恢復(fù)最初的樣子。 ajax在現(xiàn)代網(wǎng)站已經(jīng)得到非常普遍地應(yīng)用,主要的好處大家都知道(異步加載數(shù)據(jù),不用刷新整個(gè)瀏覽器,更小的數(shù)據(jù)傳輸尺寸)。對(duì)于那些老網(wǎng)站或者老項(xiàng)目來(lái)說(shuō)全盤(pán)改造成ajax并不現(xiàn)...

    JasinYip 評(píng)論0 收藏0
  • 回調(diào)、使用Promise封裝ajax()、Promise入門(mén)

    摘要:回調(diào)使用封裝入門(mén)回調(diào)是啥看這里回調(diào)是什么方應(yīng)杭知乎是一種特殊的函數(shù),這個(gè)函數(shù)被作為參數(shù)傳給另一個(gè)函數(shù)去調(diào)用。 回調(diào)、使用Promise封裝ajax()、Promise入門(mén) 1 回調(diào)是啥 call a functioncall a function back callback 看這里:Callback(回調(diào))是什么?---方應(yīng)杭知乎 callback 是一種特殊的函數(shù),這個(gè)函數(shù)被作為參數(shù)...

    godlong_X 評(píng)論0 收藏0
  • 對(duì)$.ajax()的二次封裝(僅1.55K)

    摘要:根據(jù)習(xí)慣簡(jiǎn)化了。最最重要實(shí)現(xiàn)異步請(qǐng)求結(jié)果的緩存和請(qǐng)求的批量中斷安裝支持直接引入如下函數(shù)執(zhí)行結(jié)果生成一個(gè)對(duì)象,自帶個(gè)屬性,相見(jiàn)文檔同時(shí)也支持或的引入方式。中斷異步請(qǐng)求返回一個(gè)對(duì)象,每次異步請(qǐng)求都以是緩存其中。 ajaxCache 根據(jù)習(xí)慣簡(jiǎn)化了API。最最重要:實(shí)現(xiàn)異步請(qǐng)求結(jié)果的緩存和請(qǐng)求的批量中斷 showImg(http://oaaq2vqkp.bkt.clouddn.com/1.g...

    RancherLabs 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<