怎么样给ajax的ulr加密,研究Ajax请求受登录保护的URL的优雅解决
在此先記下思路。
場景:登錄頁面login,在一個登錄后才能訪問的頁面dashboard,dashboard上有一個按鈕button,button綁定了一個單擊事件,觸發后發出一個ajax請求,ajax請求返回一個html片段,并把這個html片段更新到某個dom標簽。
條件:dashboard頁面如果登錄過期,再次訪問dashboard或點擊button發出ajax請求應該跳轉到登錄頁面login。
問題: 如果對ajax熟悉或有以上類似情況經驗的,應該知道,登錄過期后,如果不刷新dashboard頁面,而直接點擊button發出ajax請求,那么ajax獲取到的響應內容會是整個登錄頁面login,而不是正確的那個html片段,這樣更新到dom標簽的話,頁面整個亂掉了。
解決:ajax請求的地址在響應內容前先做登錄判斷,如過期則返回一個標志位,比如login=false\true,在ajax回調的方法中判斷此標志位, 如果login=true,則location.href=登陸頁面url。
優雅:理論上是這樣,還沒試驗。拿javaEE應用+jQuery Ajax(版本1.5+)來說。因為我比較熟悉JEE。JEE可以通過過濾器Filter來控制所有的受登錄保護的url請求。
jQuery Ajax可以通過ajaxSetup設置全局選項,其中有一項是關于響應的狀態碼的,在1.5+版本中叫 statusCode ,而且jQuery Ajax有一個請求頭:X-Requested-With = XMLHttpRequest
沒錯了,通過狀態碼及請求頭就可以更方便,更自動的解決登錄保護問題。
做法為: Filter通過request.getHeader(“X-Requested-With”)可以判斷是否為Ajax請求(所以自己寫的ajax最好也加上這個請求頭)。 當是Ajax請求并且登錄已經過期,則直接在Filter中響應一個狀態碼401,或者其他自定義各種碼。在ajaxSetup全局選項中配置如何處理這個狀態碼,亦即location.href=登陸頁面url。這樣就可以統一自動的處理各種登錄保護下的ajax請求了。
ajaxSetup例子如下:
$.ajaxSetup({
statusCode: {
'401': function() {
//alert('登錄超時了哦...');
//如果做了登錄自動跳回,可以再加個東東
var currUrl = encodeURIComponent(location.href);
location.href = '/login?url=' + currUrl;
}
}
});
/* URI編碼及解碼方法 */
/* 推薦方式 */
console.info(encodeURIComponent('http://www.aa.com/hh ll/'));
console.info(decodeURIComponent('http://www.aa.com/hh ll/'));
/* 另外的簡單方式
encodeURI 不對下列字符進行編碼:“:”、“/”、“;”和“?”。請使用 encodeURIComponent 對這些字符進行編碼
*/
console.info(encodeURI('http://www.aa.com/hh ll/'));
console.info(decodeURI('http://www.aa.com/hh ll/'));
總結
以上是生活随笔為你收集整理的怎么样给ajax的ulr加密,研究Ajax请求受登录保护的URL的优雅解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dwr框架ajax验证账号,dwr-Aj
- 下一篇: intel服务器ssd系列,英特尔发布S