1. 程式人生 > >jquery中ajax封裝原理/封裝jquery的ajax工具函式

jquery中ajax封裝原理/封裝jquery的ajax工具函式

第一次寫部落格,如果有些的不對或者不正確的地方,還希望大神們能夠批評指正微笑,豌豆拜上!!

Hello,every body!!,豌豆橫空出世,哈哈,糾結了很久的第一篇部落格即將面世

    噹噹噹.....出場自帶bgm喲,話說寫部落格這個事,也不知道能寫多久額,給自己一個鼓勵的膜拜吧!!
    ok,果然剛開始不知道寫點啥,尷尬...還是開始正題吧!!
    今天給大家分享一下jquery中$.ajax()方法封裝的原理,平時資料互動中會經常用到ajax方法,還是很好用的,
    但是底層的封裝原理如果瞭解的話,用起來會更得心應手些


    jquery中Ajax操作進行了封裝,在jquery中$.ajax()方法屬於最底層的方法,第二層是load()、$.get()和$.post()方法,
    第三層是$.getScript()和$.getJSON()方法。


    重點來啦,$.ajax()方法的結構為:$.ajax(options)
    該方法只有一個引數,但是在這個物件裡包含了$.ajax()方法所需求的請求設定以及回撥函式等資訊,引數以key/value的形式存在,
    所有引數都是可以選的
    ajax引數可以有:
    1:請求方式:type(get/post)
    2:後臺介面地址:url(可以從介面文件中檢視)
    3:通過data把前端傳輸後臺的必要資訊傳過去:data(如 name = 'wandou' & sex = 'girl')
    4:前後端互動的格式:dataType(xml,html,script,json現在最常用的格式之一,jsonp等)
    5:傳送請求前所要執行的函式:beforeSend:function(){}
    6:請求完成後呼叫的回撥函式(請求成功或者失敗時均呼叫)complete:function(){}
    7:請求成功後呼叫的回撥函式:success:function(){}
    8:請求失敗時被呼叫的函式:error:function(){}
    ......
    還有好多其他的引數,最近常用到這些,就寫這些吧,後面的有想要了解的可以在查閱一下其他的資料
    $.ajax({
        type:'',
        url:'',
        data:{},
        dataType:'',
        beforeSend:function(){


        },
        success:function(){


        },
        complete:function(){


       }
    })
<script src="../jquery-3.2.1.min.js"></script>
    <script>
        //先來看看需求是啥個樣紙
        //封裝ajax工具函式*/
         //有哪一些不確定的點
         //確定的引數    型別      預設      引數具體值
         //1.請求方式    字串    get       get,post
         //2.請求地址    字串    當前地址   後臺處理程式的地址(介面地址)
         //3.是否非同步    布林      true      true  false
         //4.傳送資料    物件      {}        {name:'Echo',age:10}
         //5.成功回撥    函式      -  響應成功的時候要做的事情  (需求來決定)
         //6.失敗回撥    函式      -  響應失敗的時候要做的事情  (需求來決定)






        //現在開始說原理嘍
        $(function(){
            $.ajax();
            //$是jquery中涵蓋最大的一個物件,全域性物件
        });
        window.$={};//這個在這就不多說了
        $.ajax=function(options){
            //判斷 形參options是否接受了使用者傳入的實參
            //如果接受到了,就證明使用者傳入了實參物件,就可以繼續執行後續程式碼邏輯
            //如果沒有接收到,就證明使用者沒有傳入實參,或者使用者傳入的實參不是物件型別的資料,就可以直接結束程式碼的執行
            if(!options||typeof options != 'object'){
                return false;
                //options如果沒接收到實參,他的值是false那麼!options的值是true,
                // (||只要一個是真的那麼就是真的)那麼短路運算不再執行,直接執行,return false
                //使用者輸入了實參options的值就是true,!option的值就是false
                //使用者如果傳入的實參不是物件型別,那麼後面的值就是true
                //就會進入if判斷,就結束執行
            }
            //引數預設值的處理
            var type=options.type != 'post'?'get':'post';
            //短路運算的或運算,如果第一個值是true就取第一個值,如果第一個值為false就去第二個值
            //第一個值是使用者輸入的url地址,那麼如果使用者輸入了,第一個值就是true那麼就取第一個值(使用者輸入的url地址)
            //如果使用者沒有輸入url地址,第一個值就是false,這樣就取第二個值(當前地址)
            var url=options.url||location.pathname;  //當前地址location.pathname
            var async=options.async===false?false:true;   //判斷同步或非同步
            var data=options.data||{};


            //預設請求方法時get,那麼get方法中前端向後臺傳輸的必要資料寫在url後面
            //{name:'Echo',age:19,sex:'gril'}
            //xxx.php?name="Echo"&age=19&sex='gril';
            var dataStr='';
            for(key in data){
                dataStr+=key+'='+data[key]+'&';
                //   鍵名 =   鍵值       &
            }
            //多一個&符用slice去掉
            dataStr=dataStr&&dataStr.slice(0,-1);


            //說道這的時候有沒有覺得暈暈的了?如果還是很清晰的話,那還是很牛批的哈!接受膜拜吧,大boss來了..
            //傳送前回調函式,呼叫beforeSend:function(){}
            //那麼接下里使用者呢,如果輸入了beforeSend這個屬性,那麼options.beforeSend值為true
            //反之,options.beforeSend的值為false
            if(options.beforeSend){
                var flag=options.beforeSend();
                if(flag==false){
                    //這個時候阻止ajax的傳送
                    return false;
                }
            }
            //ajax程式設計開始嘍 唔哩唔哩轟....
            var xhr=new XMLHttpRequest();
            //請求行
            xhr.open(type,type=='get'?url+dataStr:url,async);
            //請求頭
            //get方法不需要設定請求頭
            if(type=='post'){
                xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            }
            //請求主體 傳送
            xhr.send(type=='post'?datastr:null);
            //響應
            xhr.onreadystatechange=function(){
                //監聽響應狀態碼(響應狀態)
                //通訊完成
                //readystate響應狀態碼  xhr.readystate表示xhr物件的響應狀態碼
                if(readystate==4){
                    //成功
                    //status響應狀態值 200 304 403 404 500及以上
                    if(status==200){
                        //拿回資料 轉換格式
                        //後臺能確定返回給前端的資料格式
                        //需要根據後臺響應的型別來確定資料格式
                        var contentType=xhr.getResponseHeader('Content-Type');
                        //規範的寫法 application/xml;
                        //規範的寫法 application/json
                        var result;  //一般情況下,result表示後臺響應回來的資料
                        if(contentType.indexOf('xml')>-1){
                            //返回xml
                            result=xhr.responseXML;
                            //判斷我們獲取到的contentType是什麼語法格式進行解析的,
                            //如果是按照xml格式進行解析的,就把返回的資料轉換成xml格式的資料
                        }else if(contentType.indexOf('json')>-1){
                            //返回json
                            //這個後臺返回回來的資料是不是json格式進行解析的
                            //如果是,就進入if條件判斷裡
                            result=JSON.parse(xhr.responseText);
                        }else{
                            //如果xml和json都不是,那就讓他自由發揮吧!哈哈
                            result=xhr.responseText;
                        }
                        //這為什麼會有一個判斷式呢?這是個問題,其實是想做一下判斷
                        //假如說未輸入success屬性,那就取前面的內容,可是前面什麼內容也沒有,那就繼續執行其他的
                        //假如說輸入了內容,那就取後面的內容
                        options.success&&options.success(result);
                    }else{
                        //去呼叫失敗回撥函式
                        var message={
                            status:xhr.status,
                            statusText:xhr.statusText
                        };
                        //假如設定了錯誤的提示資訊,那就按照輸入的提示資訊提示
                        //假如沒有設定錯誤的資訊,那就顯示預設資訊
                        options.error&&options.error(message);
                    }
                    //通訊完成回撥函式
                    options.complete&&options.complete();
                }
            }
        };
        $.get = function(options){
            options.type='get';
            $.ajax(options);
        };
        $.post = function(options){
            options.type = 'post';
            $.ajax(options);
        }
    </script>

相關推薦

jqueryajax封裝原理/封裝jqueryajax工具函式

第一次寫部落格,如果有些的不對或者不正確的地方,還希望大神們能夠批評指正,豌豆拜上!! Hello,every body!!,豌豆橫空出世,哈哈,糾結了很久的第一篇部落格即將面世     噹噹噹.....出場自帶bgm喲,話說寫部落格這個事,也不知道能寫多久額,給自己一個鼓

JQuery$.ajax()方法參數詳解(轉載)

瀏覽器 object 服務器 字符串 false type: 要求為String類型的參數,請求方式(post或get)默認為get。註意其他http請求方法,例如put和 delete也可以使用,但僅部分瀏覽器支持。timeout: 要求為Number類型的參數,設置請求超時時

JQueryajax使用方法

ces 使用 驗證 validate pos 簡單 方法 valid d+ AJAX 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。 傳統的網頁(不使用 AJAX)如果需要更新內容,必須重載整個網頁頁面。 相比於原生AJAX五個步

jQueryajax的4種常用請求方式

ger loaded resource media val als images 詳細 有一個 jQuery中ajax的4種常用請求方式: 1.$.ajax()返回其創建的 XMLHttpRequest 對象。 $.ajax() 只有一個參數:參數 key/va

jqueryajax處理跨域的三大方式

代碼 new .ajax abs port ole ren make and 一、處理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已經實現了跨域訪問。但ie10以下不支持 只需要在服務端填上響應頭:

jqueryajax的相關事件匯總

see asc html tty 分類 spl function global 文檔 Jquery ajax事件分類 (一) 局部事件 local events 局部事件:在單個Ajax請求對象中綁定的事件,每個 Ajax 請求對象能夠依據須要綁

JqueryAJAX參數詳細(1)-轉

too ber 註意 ajax 編碼 是否 包含 options bob http://www.cnblogs.com/qiufuwu618/archive/2012/12/20/2826190.html Jquery中AJAX參數詳細列表: 參數名 類型

JQuery$.ajax()方法參數詳解

返回 自動轉換 time err last 需要 可選 修改 方式 url: 要求為String類型的參數,(默認為當前頁地址)發送請求的地址。 type: 要求為String類型的參數,請求方式(post或get)默認為get。註意其他http請求方法,例如put和

jqueryajax使用error調試錯誤的方法,實例分析了Ajax的使用方法與error函數調試錯誤的技巧

類型 如果 出錯 uri 控制 XML 執行命令 等待 mime類型 代碼:$(document).ready(function() { jQuery("#clearCac").click(function() { jQu

jquery$.ajax $.get $.post 和$.getJSON的區別和用法(轉載)

首先,.get和.get和.post其實都是.ajax的一種,在.ajax的一種,在.ajax中有一個type屬性,專門用來指定是get請求還是post請求的。如下:  $.ajax({  url:”路徑”,  type:”post/get”,  dataty

jQuery ajax 的 serialize() 方法

示例程式碼: <form> <div><input type="text" name="a" value="1" id="a" /></div> <div><input type="text" name="b" value

jqueryajax的dataType屬性包括哪幾項

dataType 型別:String 預期伺服器返回的資料型別。如果不指定,jQuery 將自動根據 HTTP 包 MIME 資訊來智慧判斷,比如 XML MIME 型別就被識別為 XML。在 1.4 中,JSON 就會生成一個 JavaScript 物件,而 script 則會執行這個

jqueryajax跨域設定http header

本文從以下幾種情況討論ajax請求: 沒有跨域,設定http header頭部(例如authorization); 跨域,沒有設定http header頭部; 跨域,設定http header頭部; 題外,php傳送http請求,並設定http header頭部; Jsonp個人理解,參考 一.aj

談談jQueryAjax那些事

jQuery中的Ajax jQuery不僅對JavaScript語言進行了封裝,也對Ajax非同步互動進行了封裝,jQuery提供了6個Ajax操作的方法:1.load()方法2.$.get()方法和$.post()方法3.$.ajax()方法4.$.getScri

jQuery $.ajax $.get $.post 和$.getJSON 的 區別 和 用法

1、$.ajax 是 jQuery 底層 AJAX 實現,$.ajax是一種通用的底層封裝,$.ajax()請求資料之後,則需要使用回撥函式,有beforeSend、error、dataFilter、success、complete等。 2、$.get $.po

jQueryajax的使用

java 下常見的json類庫都有Gson,JSON_lib 和 jackson等,但 jackson相對來說比較高效,在專案中主要也是使用jackson進行json和Java物件轉換; 那麼什麼是jackson呢  ?   1):Jackson是一個簡單基於Java應用

Jqueryajax載入提示外掛blickUI

BlockUI 外掛是用於進行AJAX操作時模擬同步傳輸時鎖定瀏覽器操作。當它被啟用時,它會阻止使用者與頁面(或頁面的一部分)進行互動,直至它被取消。 BlockUI以在DOM中新增元素的方法來實現阻止使用者與瀏覽器互動的外觀和行為。 這個外掛的用法很簡單。1 阻止使用者與頁面互動: $.blockUI

JQueryAJAX的案列使用

Servlet 中的程式碼如下 private static final long serialVersionUID = 1L; CakeService service =new CakeServiceImpl(); @Override protected v

jQuery ajax回撥函式獲得的資料格式問題

目的:在使用ajax做前、後臺互動時,有時需將從controller返回的資料在jsp頁面的表格展示出來;但是,如果資料格式不對,是無法展示的。 解決方法: 1.controller中返回一個Lis

JQuery$.ajax()方法引數

url: 要求為String型別的引數,(預設為當前頁地址)傳送請求的地址。 type: 要求為String型別的引數,請求方式(post或get)預設為get。注意其他http請求方法,例如put和       delete也可以使用,但僅部分瀏覽器支援。 timeout: 要求為Number型別