2019-07-24 單頁(yè)面應(yīng)用中JQuery-ajax使用

在單頁(yè)面app中如何配合laravel更好的使用ajax

  • 解釋常用到的ajax參數(shù)
$.ajax({
        url: "/test",  //ajax請(qǐng)求地址
        //(默認(rèn): true,dataType為script和jsonp時(shí)默認(rèn)為false)設(shè)置為 false 將不緩存此頁(yè)面露泊,建議使用默認(rèn)
        cache: false,
        //請(qǐng)求方式 "POST" 或 "GET"睹欲, 默認(rèn)為 "GET"。
        //注意:其它 HTTP 請(qǐng)求方法砂客,如 PUT 和 DELETE 也可以使用,但僅部分瀏覽器支持劫映。
        type:"GET",
        dataType:"json",    //根據(jù)返回?cái)?shù)據(jù)類(lèi)型可以有這些類(lèi)型可選:xml html script json jsonp text
        //發(fā)送到服務(wù)器的數(shù)據(jù)壹将,可以直接傳對(duì)象{a:0,b:1},
        //如果是get請(qǐng)求會(huì)自動(dòng)拼接到url后面,如:&a=0&b=1
        //如果為數(shù)組袱饭,jQuery 將自動(dòng)為不同值對(duì)應(yīng)同一個(gè)名稱(chēng)川无。
        //如 {foo:["bar1", "bar2"]} 轉(zhuǎn)換為 "&foo=bar1&foo=bar2"。
        data:{},
        //發(fā)送請(qǐng)求前可修改 XMLHttpRequest 對(duì)象的函數(shù)虑乖,
        //如添加自定義 HTTP 頭懦趋。XMLHttpRequest 對(duì)象是唯一的參數(shù)。
        //這是一個(gè) Ajax 事件疹味。如果返回false可以取消本次ajax請(qǐng)求仅叫。
        beforeSend:function(xhr){
            //this 默認(rèn)為調(diào)用本次AJAX請(qǐng)求時(shí)傳遞的options參數(shù)
        },
        //請(qǐng)求成功后的回調(diào)函數(shù)
        success: function(data,textStatus){
            //this 調(diào)用本次AJAX請(qǐng)求時(shí)傳遞的options參數(shù) ,
            //如果設(shè)置context來(lái)改變了this,那這里的this就是改變過(guò)的
        },
        //請(qǐng)求失敗時(shí)調(diào)用此函數(shù)糙捺。有以下三個(gè)參數(shù):
        //XMLHttpRequest 對(duì)象诫咱、錯(cuò)誤信息、(可選)捕獲的異常對(duì)象洪灯。
        //如果發(fā)生了錯(cuò)誤坎缭,錯(cuò)誤信息(第二個(gè)參數(shù))除了得到null之外,
        //還可能是"timeout", "error", "notmodified" 和 "parsererror"签钩。
        error:function(XMLHttpRequest, textStatus, errorThrown){
            // 通常 textStatus 和 errorThrown 之中
            // 只有一個(gè)會(huì)包含信息
            // this 調(diào)用本次AJAX請(qǐng)求時(shí)傳遞的options參數(shù)
        },
        //請(qǐng)求完成后回調(diào)函數(shù) (請(qǐng)求成功或失敗之后均調(diào)用)掏呼。
        //參數(shù): XMLHttpRequest 對(duì)象和一個(gè)描述成功請(qǐng)求類(lèi)型的字符串
        complete:function(XMLHttpRequest, textStatus) {
            //this 調(diào)用本次AJAX請(qǐng)求時(shí)傳遞的options參數(shù)
        },
        //一組數(shù)值的HTTP代碼和函數(shù)對(duì)象,當(dāng)響應(yīng)時(shí)調(diào)用了相應(yīng)的代碼铅檩。例如憎夷,如果響應(yīng)狀態(tài)是404,將觸發(fā)以下警報(bào):
        statusCode:{
            404:function(){
                alert('404柠并,頁(yè)面不存在');
            }
        }
    });
  • jquery 的complete(XHR, TS)回調(diào)方法,可以理解為是響應(yīng)的攔截器,而beforeSend可以理解為請(qǐng)求的攔截器
// todo ajax設(shè)置
$.ajaxSetup({
    beforeSend: function (xhr) {
        getToken('/blank_csrf_request', function (token) {
            xhr.setRequestHeader('X-XSRF-TOKEN', token); // 設(shè)置請(qǐng)求頭(同步請(qǐng)求)
        });
    },
    complete: ajaxError || function () {
    }
});
  • complete 回調(diào)處理,沒(méi)登錄laravel中間件直接拋出401錯(cuò)誤.ajax監(jiān)聽(tīng)到進(jìn)行登錄頁(yè)的跳轉(zhuǎn)
var ajaxError = function (xhr) {
    var status = xhr.status;
    if (status === 401) {
        // 未登錄 跳轉(zhuǎn)登錄頁(yè)
    } else if (status === 403) {
        // 其他錯(cuò)誤 如商品收藏中的商品已下架
    }else{
        // todo 正常頁(yè)面處理邏輯  
        // 如添加訪問(wèn)記錄
    }
};

除此之外還需在每個(gè)A類(lèi)頁(yè)面判斷是否有權(quán)限訪問(wèn),如無(wú)權(quán)限還應(yīng)該顯示待登錄頁(yè)面
其中A類(lèi)頁(yè)面為底部導(dǎo)航欄對(duì)應(yīng)的頁(yè)面,如下圖中首頁(yè),我的都為A類(lèi)頁(yè)面.


image.png
  • 兩小時(shí)不點(diǎn)擊系統(tǒng)報(bào)錯(cuò),如何處理? 其實(shí)是CSRF失效不存在導(dǎo)致的問(wèn)題
// todo 獲取TOKEN
var getToken = function (url, callback) {
    url = url || '/';
    var XSRF_TOKEN = document.cookie.match(/(^| )XSRF-TOKEN=([^;]*)(;|$)/);
    if (!XSRF_TOKEN || XSRF_TOKEN === "") {
        //發(fā)送一個(gè)空請(qǐng)求(同步)以更新cookie里的xsrf_token
        $.ajax({
            url: url,
            async: false,//同步
            beforeSend: function () {
            },
            success: function () {
                callback && callback(unescape(document.cookie.match(/(^| )XSRF-TOKEN=([^;]*)(;|$)/)[2]));
            }
        });
    } else {
        callback && callback(unescape(XSRF_TOKEN[2]))
    }
};

需要在laravel中增加路由

//全局的一個(gè)空請(qǐng)求以更新cookie里的xsrf token
Route::get('blank_csrf_request', 'Front\IndexController@blank_csrf_request');

對(duì)應(yīng)方法

//全局的一個(gè)空請(qǐng)求以更新cookie里的xsrf token
    public function blank_csrf_request()
    {
        //該方法不需要做任何操作岭接,自動(dòng)會(huì)Set-Cookie:XSRF-TOKEN=...
        return;
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市臼予,隨后出現(xiàn)的幾起案子鸣戴,更是在濱河造成了極大的恐慌,老刑警劉巖粘拾,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窄锅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缰雇,警方通過(guò)查閱死者的電腦和手機(jī)入偷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)械哟,“玉大人疏之,你說(shuō)我怎么就攤上這事∠九兀” “怎么了锋爪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵丙曙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我其骄,道長(zhǎng)亏镰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任拯爽,我火速辦了婚禮索抓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毯炮。我一直安慰自己逼肯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布否副。 她就那樣靜靜地躺著汉矿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪备禀。 梳的紋絲不亂的頭發(fā)上洲拇,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音曲尸,去河邊找鬼赋续。 笑死,一個(gè)胖子當(dāng)著我的面吹牛另患,可吹牛的內(nèi)容都是我干的纽乱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼昆箕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鸦列!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起鹏倘,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤薯嗤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后纤泵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體骆姐,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年捏题,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玻褪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡公荧,死狀恐怖带射,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情循狰,我是刑警寧澤窟社,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布捻浦,位于F島的核電站,受9級(jí)特大地震影響桥爽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昧识,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一钠四、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧跪楞,春花似錦缀去、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至池户,卻和暖如春咏雌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背校焦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工赊抖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寨典。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓氛雪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親耸成。 傳聞我的和親對(duì)象是個(gè)殘疾皇子报亩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359