AJax 重復(fù)提交問(wèn)題。

最近偶然看到之前封裝的ajax公用方法,發(fā)現(xiàn)之前的寫法里面加入了一個(gè)dom對(duì)象,在發(fā)送ajax請(qǐng)求之前先用jQuery的off函數(shù)取消dom對(duì)象的onClick事件,等待ajax處理完成后重新給dom對(duì)象綁定onClick事件,總覺(jué)得很怪異,所以就查了下大神們的解決方法。

$(function(){
    var _c = {};
    
    _c.ajax = function(url, method, param, onSuccess, onFailure){
        $.ajax({
            url: url,
            type: method,
            data: param,
            dataType: "json",
        })
        .done(function(data){
            onSuccess(data);
        })
        .fail(function(error){
            //過(guò)濾掉被拋棄的請(qǐng)求
            if (error.readyState === 0 && error.status === 0) {
                
                return false;
            }
            onFailure(JSON.parse(error.responseText));
        });
    };

    _c.requestUrl = {};

    $.ajaxPrefilter(function(options, originalOptions, jqXHR) {
        var key = options.url;
        if (typeof(_c.requestUrl[key]) === 'undefined') {
            _c.requestUrl[key] = jqXHR;
        } else {
            //放棄當(dāng)前觸發(fā)的請(qǐng)求
            jqXHR.abort();
            //放棄之前觸發(fā)的請(qǐng)求
            //_c.requestUrl[key].abort(); 
        }
        options.complete = function(jqXHR, textStatus) {
            delete _c.requestUrl[key];
        };
    });
});
  • jQuery.ajaxPrefilter() 函數(shù)用于**指定預(yù)先處理Ajax參數(shù)選項(xiàng)的回調(diào)函數(shù)。
  • 通俗的將就是ajax在發(fā)送到web服務(wù)器之前,可以調(diào)用這個(gè)方法來(lái)改變請(qǐng)求的內(nèi)容。
  • 大致的實(shí)現(xiàn)方法就是將url存入一個(gè)全局變量中,請(qǐng)求之前檢查變量中是否存在當(dāng)前請(qǐng)求的url值,若存在則拋棄當(dāng)前的請(qǐng)求,待相同的上一次請(qǐng)求處理完成后,在變量數(shù)組中刪除當(dāng)前的url,就可再次請(qǐng)求了。
  • 總結(jié):對(duì)比之前的方法,代碼量減少不少,而且也不必關(guān)注dom對(duì)象了,下一個(gè)關(guān)注點(diǎn)可能就是限制請(qǐng)求的頻率了,比如說(shuō)3秒內(nèi)同一個(gè)接口無(wú)法請(qǐng)求。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.JQuery 基礎(chǔ) 改變web開(kāi)發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計(jì)者無(wú)需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級(jí)特性。 1....
    LaBaby_閱讀 1,494評(píng)論 0 2
  • 1.JQuery 基礎(chǔ) 改變web開(kāi)發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計(jì)者無(wú)需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級(jí)特性。 1....
    LaBaby_閱讀 1,262評(píng)論 0 1
  • 五十三:請(qǐng)解釋 JavaScript 中 this 是如何工作的。1.方法調(diào)用模式當(dāng)一個(gè)函數(shù)被保存為一個(gè)對(duì)象的屬性...
    Arno_z閱讀 682評(píng)論 0 2
  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    前端進(jìn)階之旅閱讀 115,530評(píng)論 24 450
  • 第二十章閱讀的第四個(gè)層次主題閱讀 時(shí)間:2017.6.23 day20
    尋心塘閱讀 219評(píng)論 0 0

友情鏈接更多精彩內(nèi)容