成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

解決ExtJs中ajax重定向的問題

clasnake / 3490人閱讀

摘要:問題問題來了,都是采用向后臺發(fā)送請求,這時候如果重定向到無權(quán)限的錯誤頁面就會產(chǎn)生問題。最直接的解決方案就是,每一個向后臺發(fā)送的請求,后臺都會返回,然后判斷,不符合條件就。

首先要明確的是,ajax是局部刷新,是不支持重定向的,只能通過window.location.href="http://xxx/error.html"的方式實現(xiàn),在后臺重定向只會把html返回給前臺,頁面并不會跳轉(zhuǎn)。

需求

首先我們項目采用的是extJs做UI框架,后臺是SSM?,F(xiàn)在項目要加入簡單數(shù)據(jù)權(quán)限過濾的功能,于是我使用過濾器,獲取用戶訪問的接口地址,判斷只要與session中的可以訪問的數(shù)據(jù)接口權(quán)限不匹配,那么就跳轉(zhuǎn)到無權(quán)限的錯誤頁面。

問題

問題來了,ExtJs都是采用ajax向后臺發(fā)送請求,這時候如果重定向到無權(quán)限的錯誤頁面就會產(chǎn)生問題。最直接的解決方案就是,每一個向后臺發(fā)送的ajax請求,后臺都會返回message,然后判斷messsage,不符合條件就window.location.href="http://xxx/error.html"。但是,如果初期有這樣的設(shè)計就好了,但我這個項目是后期才加權(quán)限的功能,如果一個個改起來,肯定是不可能的。

解決方法
解決方法1

新建一個js文件,添加如下代碼:

//為Ext的ajax添加監(jiān)聽
//requestcomplete:請求完成
Ext.Ajax.addListener("requestcomplete",function(conn, response, options, eOpts){
    //后臺也可以放入請求頭還獲取錯誤信息,前臺通過`response.getAllResponseHeaders()`來獲取
    //var msg = response.getAllResponseHeaders();
    if(response.responseText.indexOf("error") != -1){
        window.location.href="http://xxx/error.html";
    }
},this);

一般我們的項目都是一個主的main.jsp,然后里面一個個ExtJs的iframe,所以在main.jsp中直接引入剛才新建的js,當(dāng)ajax請求完成后,接收到后臺返回的message,不符合條件,跳轉(zhuǎn)到錯誤頁面。

解決方法2

方法2比較通用也比較簡單,直接在filter中使用out.print輸出一段js進(jìn)行跳轉(zhuǎn)。

    UserVo u = (UserVo) session.getAttribute("user");
    if (u == null) {
    PrintWriter out = res.getWriter();
    if (req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equals("XMLHttpRequest")) {
        String message = path + "/user/loginHome";
        out.print(message);
        return;
    }else {
        out.println("");
        out.println("");
        out.println("");
        return;
    }

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66403.html

相關(guān)文章

  • extjs-mvc結(jié)構(gòu)實踐(二):基本頁面

    摘要:接著來,上一篇搭建了基本的項目骨架,到最后,其實啥也沒看見。。。目標(biāo)全屏顯示左側(cè)導(dǎo)航菜單,右側(cè)標(biāo)簽頁切換操作內(nèi)容區(qū)域。一般模型與你后臺返回的數(shù)據(jù)結(jié)構(gòu)一一對應(yīng)。給其他組件提供一致接口使用數(shù)據(jù)。整個構(gòu)成一個所謂的。 接著來,上一篇搭建了基本的項目骨架,到最后,其實啥也沒看見。。。書接上回,開始寫UI效果。 目標(biāo) 全屏顯示、左側(cè)導(dǎo)航菜單,右側(cè)標(biāo)簽頁切換操作內(nèi)容區(qū)域。包含header和foo...

    changfeng1050 評論0 收藏0
  • window.open被瀏覽器攔截解決方案

    摘要:原因分析深入研究當(dāng)瀏覽器檢測到非用戶操作產(chǎn)生的新彈出窗口,則會對其進(jìn)行阻止。但是,被瀏覽器攔截我們代碼中要彈出的窗口并不是程序員所希望的。 現(xiàn)象 最近在做項目的時候碰到了使用window.open被瀏覽器攔截的情況,搞得人無比郁悶啊,雖然在自己的環(huán)境可以對頁面進(jìn)行放行,但是對用戶來說,不能要求用戶都來通過攔截。何況當(dāng)出現(xiàn)攔截時,很多小白根本不知道發(fā)生了啥,不知道在哪里看被攔截的頁面,簡...

    rickchen 評論0 收藏0
  • Extjs - model總結(jié)

    摘要:數(shù)據(jù)讀取器相當(dāng)于原始數(shù)據(jù)格式與標(biāo)準(zhǔn)數(shù)據(jù)格式之間的橋梁,它屏蔽了原始數(shù)據(jù)格式不同對程序開發(fā)造成的影響。零是有效的,但空字符串無效。 用了Extjs快一年了,這里整理一下model。 數(shù)據(jù)模型 showImg(https://segmentfault.com/img/bVzXAR); Extjs 中數(shù)據(jù)包總共包含了40多個類,其中有三個類比其他類有更重要的地位,它們分別是:model、st...

    EastWoodYang 評論0 收藏0
  • Web項目如何防止客戶端復(fù)發(fā)送請求

    摘要:在項目中,有一些請求或操作會對數(shù)據(jù)產(chǎn)生影響比如新增刪除更新,針對這類請求一般都需要做一些保護(hù),以防止用戶有意或無意的重復(fù)發(fā)起這樣的請求導(dǎo)致的數(shù)據(jù)錯亂。本文總結(jié)了一些防止客戶端重復(fù)發(fā)送請求的方法。 在Web項目中,有一些請求或操作會對數(shù)據(jù)產(chǎn)生影響(比如新增、刪除、更新),針對這類請求一般都需要做一些保護(hù),以防止用戶有意或無意的重復(fù)發(fā)起這樣的請求導(dǎo)致的數(shù)據(jù)錯亂。 本文總結(jié)了一些防止客戶端重...

    fireflow 評論0 收藏0
  • Web項目如何防止客戶端復(fù)發(fā)送請求

    摘要:在項目中,有一些請求或操作會對數(shù)據(jù)產(chǎn)生影響比如新增刪除更新,針對這類請求一般都需要做一些保護(hù),以防止用戶有意或無意的重復(fù)發(fā)起這樣的請求導(dǎo)致的數(shù)據(jù)錯亂。本文總結(jié)了一些防止客戶端重復(fù)發(fā)送請求的方法。 在Web項目中,有一些請求或操作會對數(shù)據(jù)產(chǎn)生影響(比如新增、刪除、更新),針對這類請求一般都需要做一些保護(hù),以防止用戶有意或無意的重復(fù)發(fā)起這樣的請求導(dǎo)致的數(shù)據(jù)錯亂。 本文總結(jié)了一些防止客戶端重...

    sewerganger 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<