1. 程式人生 > >本系統登出子系統不發生頁面跳轉的方法

本系統登出子系統不發生頁面跳轉的方法

最近的專案中用到了單點登入,在登入時會進入一個子系統中,校驗成功後再回到本系統。在退出時遇到一個麻煩事,我在本系統點選一次退出需要跑到子系統中,子系統不會自動退出還需要再點一下退出才行,使用者體驗十分不好。

解決方式如下:

function logout() {
    // 先執行子系統的登出
    var c_logout = "<form id='c-logout' action='http://外部連結/logout' style='display: none;'></form>";
    $("body").append(c_logout); 
    $("#c-logout").submit();           
    setTimeout(function () { 
        var f_logout = "<form id='f-logout' action='xxxxxxxxxx/logout' style='display: none;'></form>";   
        $("body").append(f_login); 
        $("#f-login").submit(); 
    }, 100);
}

如果模擬兩次表單提交會有一個問題就是隻能有一個模擬的表單生效(寫在前邊的表單),原因是表單提交必然導致頁面重新整理跳轉這麼做導致方法後續的程式碼無法生效,即使在表單中添加了,target="_blank"主執行緒上的方法都將不再執行,而寫在定時器中的程式碼在一開始就已經註冊進事件佇列,待主執行緒執行完跳轉前執行由回撥函式註冊的回撥函式。

這裡需要注意如果將定時器的延遲時間設定的太長將不能達到預期的效果,具體原因還希望和大家共同討論。