<div id="article_content" class="article_content csdn-tracking-statistics tracking-click" data-mod="popu_519" data-dsm="post">javascript
<p>通常咱們會在過濾器裏判斷登陸狀態,若是沒登陸就跳轉登陸頁面,過濾器java核心代碼以下:</p> <p></p> <div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span class="tracking-ad" data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 496px; top: 250px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent"></div></span><span class="tracking-ad" data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-j"><li class="alt"><span><span>UserItem loginUser = (UserItem)request.getSession().getAttribute(</span><span class="string">"loginUser"</span><span>); </span></span></li><li class=""><span><span class="keyword">if</span><span>(loginUser == </span><span class="keyword">null</span><span>) { </span></span></li><li class="alt"><span> response.sendRedirect(<span class="string">"/login.action"</span><span>); </span></span></li><li class=""><span>} </span></li></ol></div><pre code_snippet_id="437852" snippet_file_name="blog_20140729_1_3487486" name="code" class="java" style="display: none;">UserItem loginUser = (UserItem)request.getSession().getAttribute("loginUser"); if(loginUser == null) { response.sendRedirect("/login.action"); }</pre>這個對於普通頁面來講徹底沒問題,可是在使用ajax的時候每每得不到想要的效果。由於頁面根本沒跳轉,只是捕獲到了登陸頁面的源碼而已。 <p></p> <p>網上一堆庸人給出一堆扯蛋的方法,主要有。</p> <p>1.返回的字符串附加登陸狀態;<span style="color:#ff6666">(那麼多,你願意改麼,並且先後端都得改,編碼的時候還要總去考慮那個狀態煩不煩)</span></p> <p>2.修改http頭信息;<span style="color:#ff6666">(裝B深沉型)</span></p> <p>3.修改jquery源文件判斷;<span style="color:#ff6666">(勉強算個程序員,可是盡力不去動源,性能問題你還得解壓再壓縮,別人也不必定知道你改過源碼)</span></p> <p>個人解決方案跟第三種方法思路接近,重寫ajax方法實現前置處理,代碼以下:</p> <p></p> <div class="dp-highlighter bg_javascript"><div class="bar"><div class="tools"><b>[javascript]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span class="tracking-ad" data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 534px; top: 685px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent"></div></span><span class="tracking-ad" data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-c"><li class="alt"><span><span>jQuery(</span><span class="keyword">function</span><span>($){ </span></span></li><li class=""><span> <span class="comment">// 備份jquery的ajax方法 </span><span> </span></span></li><li class="alt"><span> <span class="keyword">var</span><span> _ajax=$.ajax; </span></span></li><li class=""><span> <span class="comment">// 重寫ajax方法,先判斷登陸在執行success函數 </span><span> </span></span></li><li class="alt"><span> $.ajax=<span class="keyword">function</span><span>(opt){ </span></span></li><li class=""><span> <span class="keyword">var</span><span> _success = opt && opt.success || </span><span class="keyword">function</span><span>(a, b){}; </span></span></li><li class="alt"><span> <span class="keyword">var</span><span> _opt = $.extend(opt, { </span></span></li><li class=""><span> success:<span class="keyword">function</span><span>(data, textStatus){ </span></span></li><li class="alt"><span> <span class="comment">// 若是後臺將請求重定向到了登陸頁,則data裏面存放的就是登陸頁的源碼,這裏須要找到data是登陸頁的證據(標記)</span><span> </span></span></li><li class=""><span> <span class="keyword">if</span><span>(data.indexOf(</span><span class="string">'weinianjie'</span><span>) != -1) { </span></span></li><li class="alt"><span> window.location.href= Globals.ctx + <span class="string">"/login.action"</span><span>; </span></span></li><li class=""><span> <span class="keyword">return</span><span>; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> _success(data, textStatus); </span></li><li class="alt"><span> } </span></li><li class=""><span> }); </span></li><li class="alt"><span> _ajax(_opt); </span></li><li class=""><span> }; </span></li><li class="alt"><span>}); </span></li></ol></div><pre code_snippet_id="437852" snippet_file_name="blog_20140729_2_3378019" name="code" class="javascript" style="display: none;">jQuery(function($){ // 備份jquery的ajax方法 var _ajax=$.ajax; // 重寫ajax方法,先判斷登陸在執行success函數 $.ajax=function(opt){ var _success = opt && opt.success || function(a, b){}; var _opt = $.extend(opt, { success:function(data, textStatus){ // 若是後臺將請求重定向到了登陸頁,則data裏面存放的就是登陸頁的源碼,這裏須要找到data是登陸頁的證據(標記) if(data.indexOf('weinianjie') != -1) { window.location.href= Globals.ctx + "/login.action"; return; } _success(data, textStatus); } }); _ajax(_opt); }; });</pre> <p>在登陸頁面的源碼裏面,你隨便找個地方打個標記而後隱藏掉,好比個人標記就是weinianjie。對於$.get和$.post就不用說了吧,這兩個方法都是調用了$.ajax方法的,因此也就自動獲取了前置判斷能力。</p> <p>大功告成,注意以上擴展須要放在你的全部ajax請求以前執行。</p> <p><br> <br> </p> </div>java