亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發(fā) > AJAX > 正文

原生Javascript封裝的一個(gè)AJAX函數(shù)分享

2024-09-01 08:33:21
字體:
供稿:網(wǎng)友
這篇文章主要介紹了原生Javascript封裝的一個(gè)AJAX函數(shù)分享,本文是實(shí)際項(xiàng)目中提取出來的,簡單易用,需要的朋友可以參考下
 
 

最近的工作中涉及到大量的ajax操作,本來該后臺(tái)做的事也要我來做了.而現(xiàn)在使用的ajax函數(shù)是一個(gè)后臺(tái)人員封裝的—-但他又是基于jquery的ajax,所以離開了jquery這個(gè)函數(shù)就毫無作用了.而且我覺得,jquery的ajax方法是很完善的了,可以直接用,如果都有jquery了,那么他的ajax就不用白不用了.我缺少的是一個(gè)能在沒有jquery的情況下使用的ajax方法.

所以我也花一天時(shí)間寫了一個(gè),參數(shù)與調(diào)用方法類似于jquery的ajax.就叫xhr吧,因?yàn)閤hr=XMLHttpRequest.

 

復(fù)制代碼代碼如下:

/*
* Name: xhr,AJAX封裝函數(shù)
* Description: 一個(gè)ajax調(diào)用封裝類,仿jquery的ajax調(diào)用方式
* Author:十年燈
*/
var xhr = function () {
    var 
    ajax = function  () {
        return ('XMLHttpRequest' in window) ? function  () {
                return new XMLHttpRequest();
            } : function  () {
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
    }(),
    formatData= function (fd) {
        var res = '';
        for(var f in fd) {
            res += f+'='+fd[f]+'&';
        }
        return res.slice(0,-1);
    },
    AJAX = function(ops) {
        var     
        root = this,
        req = ajax();

 

        root.url = ops.url;
        root.type = ops.type || 'responseText';
        root.method = ops.method || 'GET';
        root.async = ops.async || true;     
        root.data = ops.data || {};
        root.complete = ops.complete || function  () {};
        root.success = ops.success || function(){};
        root.error =  ops.error || function (s) { alert(root.url+'->status:'+s+'error!')};
        root.abort = req.abort;
        root.setData = function  (data) {
            for(var d in data) {
                root.data[d] = data[d];
            }
        }
        root.send = function  () {
            var datastring = formatData(root.data),
            sendstring,get = false,
            async = root.async,
            complete = root.complete,
            method = root.method,
            type=root.type;
            if(method === 'GET') {
                root.url+='?'+datastring;
                get = true;
            }
            req.open(method,root.url,async);
            if(!get) {
                req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                sendstring = datastring;
            }      

            //在send之前重置onreadystatechange方法,否則會(huì)出現(xiàn)新的同步請求會(huì)執(zhí)行兩次成功回調(diào)(chrome等在同步請求時(shí)也會(huì)執(zhí)行onreadystatechange)
            req.onreadystatechange = async ? function  () {
                // console.log('async true');
                if (req.readyState ==4){
                    complete();
                    if(req.status == 200) {
                        root.success(req[type]);
                    } else {
                        root.error(req.status);
                    }                   
                }
            } : null;
            req.send(sendstring);
            if(!async) {
                //console.log('async false');
                complete();
                root.success(req[type]);
            }
        }
        root.url && root.send();        
    };
    return function(ops) {return new AJAX(ops);}    
}();

 

參數(shù)說明:

1.url:請求地址.可以不填,請求就不會(huì)發(fā)起,但如果不填又強(qiáng)行send,出了錯(cuò)不怪我
2.method: ‘GET'或'POST',全大寫,默認(rèn)GET
3.data: 要附帶發(fā)送的數(shù)據(jù),格式是一個(gè)object
4.async: 是否異步,默認(rèn)true
5.type: 返回的數(shù)據(jù)類型,只有responseText或responseXML,默認(rèn)responseText
6.complete: 請求完成時(shí)執(zhí)行的函數(shù)
7.success: 請求成功時(shí)執(zhí)行的函數(shù)
8.error: 請求失敗時(shí)執(zhí)行的函數(shù)

注:其中的type參數(shù),并沒有jquery的dataType那么豐富,只有原生AJAX有的responseText或responseXML.要是返回的是json數(shù)據(jù),你需要在success函數(shù)中自己處理一下把text轉(zhuǎn)成json.

函數(shù)說明:

一個(gè)實(shí)例化的xhr對(duì)象有兩個(gè)函數(shù)可使用,一個(gè)是send,調(diào)用方法是:xhr.send(),無參數(shù),其作用是發(fā)起請求過程.如果初始化時(shí)沒有url,則不會(huì)執(zhí)行send方法,這樣你就可以在后面再加入url,并手動(dòng)發(fā)起send—-如果send的時(shí)候沒有url,那么請求會(huì)失敗并且我沒有處理這個(gè)錯(cuò)誤,出了錯(cuò)只有你自己找了.

另一個(gè)方法是setData,調(diào)用方法是xhr.setData(data_obj),其參數(shù)是一個(gè)object. setData方法的作用是局部替換xhr的data屬性里的值,比如xhr.data中已有一個(gè)page:1,你可以用xhr.setData({page:2})來更新他的值,而不影響data中已存在的其他屬性值.

調(diào)用方法:

復(fù)制代碼代碼如下:

var a1 = xhr({
        url:'2.php',
        data:{
            'username':'lix',
            'password':'123456',
            'gender':'male',
            'interset':'play'
        },
        async:false,
        method:'GET',
        success: function  (data) {
            var obj = JSON.parse(data);
            //....
        }
    });

注:不用寫new

 

特色介紹:

經(jīng)過這段時(shí)間的項(xiàng)目經(jīng)驗(yàn),我發(fā)現(xiàn)一個(gè)ajax類應(yīng)該具有一個(gè)很常見的特色:便于重復(fù)發(fā)起請求.比如項(xiàng)目中我寫分頁ajax的時(shí)候,每次翻頁都要發(fā)送請求,但發(fā)送的數(shù)據(jù)中除了當(dāng)前頁碼和每頁條數(shù),其他的都是不會(huì)改變的.如果多次這樣的請求,都要重復(fù)定義那些不變的參數(shù),無疑是種資源浪費(fèi).

所以這個(gè)xhr函數(shù),就已經(jīng)考慮了這個(gè)功能.還是拿分頁的例子來說,我們可以在頁面加載完成的時(shí)候就初始化一個(gè)xhr對(duì)象,保存為變量a1,當(dāng)發(fā)起翻頁請求時(shí),其他的什么參數(shù)都沒變,但pageNumber變了,此時(shí)就可以調(diào)用xhr的setData方法,把pageNumber改掉.

 

復(fù)制代碼代碼如下:

a1.setData({pageNumber:2});

 

注:setData的參數(shù)也是一個(gè)object.

當(dāng)然,你也可以把data全盤替換:

a1.data = {…};

不只是data,你可以對(duì)a1這個(gè)已經(jīng)實(shí)例化的xhr對(duì)象進(jìn)行更多的更改,比如換掉url,換掉success函數(shù),GET換成POST,同步換成異步…換完之后,再調(diào)用a1.send()方法,他就會(huì)按你的設(shè)置再次發(fā)起請求了.

當(dāng)然,如果是完全不相關(guān)的另一個(gè)ajax請求,就沒有必要硬要用這個(gè)現(xiàn)成的a1了.我們可以再實(shí)例化一個(gè)xhr,叫a2什么的.

如果你對(duì)xhr這個(gè)名字不滿意,那就只有自己改掉了.

另外提供壓縮加密版.未壓縮版去掉注釋大概2kb,壓縮版1.00kb.

復(fù)制代碼代碼如下:

var xhr=function(){var e=function(){return"XMLHttpRequest"in window?function(){return new XMLHttpRequest}:function(){return new ActiveXObject("Microsoft.XMLHTTP")}}(),t=function(e){var t="";for(var n in e){t+=n+"="+e[n]+"&"}return t.slice(0,-1)},n=function(n){var r=this,i=e();r.url=n.url;r.type=n.type||"responseText";r.method=n.method||"GET";r.async=n.async||true;r.data=n.data||{};r.complete=n.complete||function(){};r.success=n.success||function(){};r.error=n.error||function(e){alert(r.url+"->status:"+e+"error!")};r.abort=i.abort;r.setData=function(e){for(var t in e){r.data[t]=e[t]}};r.send=function(){var e=t(r.data),n,s=false,o=r.async,u=r.complete,a=r.method,f=r.type;if(a==="GET"){r.url+="?"+e;s=true}i.open(a,r.url,o);if(!s){i.setRequestHeader("Content-type","application/x-www-form-urlencoded");n=e}i.onreadystatechange=o?function(){if(i.readyState==4){u();if(i.status==200){r.success(i[f])}else{r.error(i.status)}}}:null;i.send(n);if(!o){u();r.success(i[f])}};r.url&&r.send()};return function(e){return new n(e)}}()

 

xhr肯定有不完善的地方,以后使用中如果發(fā)現(xiàn)了,我會(huì)及時(shí)修正的.如果你用得不爽或發(fā)現(xiàn)不足,也請不吝提出改進(jìn)意見.


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
欧美日韩一区在线观看视频| 成人高清网站| 无码国产伦一区二区三区视频| 日韩精品欧美激情一区二区| 国产精品美乳一区二区免费| 影音欧美亚洲| 亚洲成人精品久久| 国产一级免费av| 国产日产一区| 在线亚洲免费| 91福利视频免费观看| 日韩一区国产二区欧美三区| 三级全黄视频| 成人精品在线播放| 色免费在线视频| 影音先锋在线影院| 狠狠色狠狠色综合人人| 高清中文字幕一区二区三区| 本网站久久精品| 久久一本综合频道| 国产免费av一区二区三区| 亚洲男人都懂的网站| 神马久久午夜| 北条麻妃99精品青青久久| 欧洲s码亚洲m码精品一区| 国产精品一站二站| 国产精品第七页| 欧美精品日韩综合在线| 涩涩视频在线| 韩国免费在线视频| 在线视频日韩精品| 五月天丁香久久| h动漫在线视频| 亚洲婷婷国产精品电影人久久| av加勒比在线| 日韩精品免费在线视频观看| 秋霞午夜在线观看| 欧美深夜福利视频| 91精品国产综合久久久蜜臀九色| 亚洲黄色小说在线观看| 拍拍拍无挡免费播放视频在线观看| 538国产视频| 天堂在线资源8| 国产精品免费不| 有码中文亚洲精品| 日韩 欧美 视频| 综合色婷婷一区二区亚洲欧美国产| 日韩城人网站| 国产一区二区三区香蕉| 国产精品三级| 欧美男同性恋视频网站| 国内精品久久久久国产| 理论片一区二区在线| 久久亚洲国产成人亚| 欧美日本免费| 91在线观看一区二区| 中文字幕2020第一页| 久久69精品久久久久久国产越南| 国内精品福利视频| 青娱乐一区二区| 色与欲影视天天看综合网| 国产视频亚洲| 黄网站在线免费| 日本精品视频一区二区| 日本美女高清在线观看免费| 天天色天天射天天综合网| www亚洲国产| 麻豆精品视频在线观看免费| 直接在线观看的三级网址| 粉嫩av亚洲一区二区图片| 天天色天天操综合| 久久这里精品国产99丫e6| 日韩专区一卡二卡| 99国产精品久久久久老师| 国产精品jizz在线观看麻豆| 欧美性xxxx在线播放| 中文字幕自拍偷拍| 亚洲少妇自拍| 亚洲欧洲一区二区三区| 久久久久毛片免费观看| www.一区二区| 98视频精品全部国产| 看国产成人h片视频| 国产一区二区日韩| 久久99精品国产99久久| 国产91在线播放精品91| 国产免费一区二区三区最新6| 91亚洲精品国偷拍自产在线观看| 国产大尺度在线观看| 午夜亚洲视频| 天天操天天干天天插| 国产精品伦一区二区三区| 日本黄色一区二区三区| 国产亚洲欧美日韩高清| 丁香婷婷综合激情五月色| 中文字幕精品一区二区精品| 国产精品三级美女白浆呻吟| 国产精品裸体一区二区三区| 精品成人在线观看| 亚洲欧洲中文字幕| 国产精品三级久久久久三级| 在线观看av影片| 国产成人在线免费| 久久久亚洲欧洲日产国码αv| 久久久精品久久| 国产一区二区三区四区在线| 亚洲精品日韩久久| 熟妇熟女乱妇乱女网站| 国产日韩欧美电影| 高清视频一区二区三区四区| 亚洲成人国产综合| 日本女人性生活视频| 日本aaa在线观看| 一级特黄aaa大片在线观看| 欧美大片拔萝卜| 五月天婷亚洲天综合网精品偷| 国产美女视频一区二区二三区| 国产黄色一区| 国产精品白丝喷水在线观看| 国模吧无码一区二区三区| 97操在线视频| 图片区偷拍区小说区| 日韩久久免费av| 亚洲色图欧美激情| 中文字幕乱视频| 国产精品自拍亚洲| 国产精品久久久久久久久久三级| 精品中文字幕在线| 黄色免费网站视频| 亚洲熟妇av日韩熟妇在线| 综合久久国产九一剧情麻豆| 久久九九精品99国产精品| 亚洲精品a级片| 欧洲精品乱码久久久久蜜桃| 精品国产乱码久久久久久天美| 欧美成人午夜精品免费| jizz在线免费播放| 一区二区三区在线免费看| 久久久久久久黄色| 欧美wwwwwww| 亚洲欧洲日韩综合一区二区| 潘金莲一级淫片aaaaaa播放| 91精品在线免费观看| 亚洲精品乱码久久久久久动漫| 一区二区三区免费视频播放器| 日韩欧美在线看| 色综合天天综合给合国产| 99热精品一区二区| 中国一区二区视频| 国产模特av私拍大尺度| 国产精品视频成人| 中文字幕免费视频| 国产不卡av在线| 成人黄网大全在线观看| 波多野结衣作品集| 一区二区三区日韩在线观看| 中文字幕日韩综合| 琪琪第一精品导航| 男人天堂中文字幕| 欧美成人一区二免费视频软件| 国产无遮挡在线视频免费观看| 欧美日韩精品一区二区三区蜜桃| 久久女同性恋中文字幕| 催眠调教后宫乱淫校园| 欧洲激情综合| avtt综合网| 香蕉视频色在线观看| 亚洲第一天堂无码专区| 国产又黄又猛又爽| 日韩一级在线视频| 暖暖日本在线观看| 久久99国产精品免费网站| 无码日本精品xxxxxxxxx| 欧美中文字幕视频在线观看| 精品国产一区二区亚洲人成毛片| 亚洲少妇诱惑| 国产精品任我爽爆在线播放| 肉大捧一出免费观看网站在线播放| 欧美久久久久久久久| 法国空姐在线观看免费| 日日躁夜夜躁aaaabbbb| 亚洲午夜精品久久久久久app| jizz国产| 一本色道久久88精品综合| 国产三级国产精品国产专区50| 粉嫩一区二区| 精品久久久亚洲| 人妻精品无码一区二区| 在线日韩av片| 亚洲国产一区二区在线观看| 97精品高清一区二区三区| 亚洲不卡av不卡一区二区| 成人国产电影在线观看| 视频一区中文字幕国产| 日本丰满少妇一区二区三区| 欧美视频在线第一页| 欧美大片aaa| 国产一区二区三区在线观看网站| 在线观看国产免费视频| 欧美成人精品在线视频| 精品少妇一区二区三区视频免付费| 亚洲亚洲精品在线观看| 天天在线免费视频| 日韩毛片无码永久免费看| 欧美日韩中文字幕综合视频| 久久品道一品道久久精品| 欧美成人午夜激情在线| 不卡视频一区| 欧美综合欧美视频| 4hu最新网址| 福利h视频在线| 亚洲精选91| 国产有码一区二区| 91福利视频导航| 欧美黑人狂野猛交老妇| 老司机深夜福利网站| 亚洲啪av永久无码精品放毛片| 欧美与黑人午夜性猛交久久久| 国产理论视频在线观看| 国产精品免费麻豆入口| 色天使在线观看| 成人h视频在线观看播放| 最近中文字幕免费mv2018在线| 一区二区三区黄色片| 国产三级做爰在线观看| 一区二区福利视频| 黄色动漫免费看| 涩涩视频在线观看下载| 国产乱妇乱子| 亚洲免费成人av在线| 人妻精品久久久久中文字幕| 国产福利视频一区| 青青视频在线播放| 国产亚洲欧洲一区高清在线观看| 国产剧情日韩欧美| 无码国产伦一区二区三区视频| 四虎影视1304t| 激情综合五月婷婷| 欧美美女在线直播| 亚洲日本欧美日韩高观看| 午夜免费性福利| 日本福利在线| 精品久久久在线观看| 激情五月俺来也| yes4444视频在线观看| 无码人妻精品一区二区三应用大全| 久久国产精品无码网站| 欧美国产一区在线| 91色九色蝌蚪| 一色屋色费精品视频在线看| 欧美无砖专区免费| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久99精品久久久久久园产越南| 国产精品久久一区主播| 亚洲大片免费观看| 那种视频在线观看| 国产成人综合精品三级| 欧美成人午夜剧场免费观看| 中文区中文字幕免费看| 日韩免费观看高清| 国内精品久久久久久久久电影网| av综合网页| 国产精品无码久久久久一区二区| 成人av无码一区二区三区| 你懂的亚洲视频| 色综合久久精品亚洲国产| 成人看片网页| 日韩精品一卡二卡三卡四卡无卡| 99re热这里只有精品免费视频| 无码人妻精品一区二区三区66| 国产精品国产一区| 亚洲精品动漫| 天天综合网 天天综合色| 1区不卡电影| 国内精品国产三级国产a久久| 天天天天天天天天操| 不卡视频观看| 天堂аⅴ在线最新版在线| 亚洲网友自拍偷拍| 2022国产精品视频| 99在线观看精品视频| 午夜免费啪视频观看视频| 亚洲成人网在线| 激情五月播播久久久精品| 国产白浆在线观看| 亚洲第一福利网站| 福利一区二区三区视频在线观看| 国产精品久久综合| bdsmchinese医疗折磨| 奇米一区二区三区| 伊人久久大香线蕉综合网蜜芽| 天天干天天操天天拍| 国产盗摄x88av| 欧美69精品久久久久久不卡| 国产精品二区三区| 法国伦理少妇愉情| 中文字幕一区二区5566日韩| 亚洲国产精品女人| 亚洲午夜激情av| 国产精品一二三区视频| 亚洲女人的天堂| 成人av在线网站| xxxx日本免费| 91在线视频一区| 青草av.久久免费一区| 97视频在线观看亚洲| 亚洲国产中文字幕在线| 国产综合免费视频| 性色视频在线观看| 欧美激情一区二区三区全黄| 欧美午夜大胆人体| 国产又粗又长视频| 在线这里只有精品| 18free性欧美另类hd| 色狠狠一区二区三区香蕉| 经典三级在线| 夜夜躁日日躁狠狠久久av| 欧洲亚洲一区二区| 国产久草在线| 欧美成人tv| 午夜免费视频在线国产| 大陆av在线播放| 四虎久久免费| 亚洲国产精品无码观看久久| av电影免费看| 色偷偷www8888| 裸体免费网站| 亚洲免费在线播放|