有一個link,click時會觸發原生的get請求,當然你也可以使用javascript 生成一個ajax請求來響應並且屏蔽掉原生的get請求,但此時會遇到這樣的問題:如果javascript還沒有load結束,就無法得到想要的ajax請求結果。
有兩種思路還解決這個問題。
1. 依照請求的類型還處理
如果一個請求是ajax請求,在qi在其請求的header裏會出現X-Requested-With字段的header,那麼就可以通過捕獲該信息來分別響應ajax請求和原生請求。
2. 限制在load javascript過程中不做任何操作
在javascript加載過程中,不響應任何操作。以link爲例,只需要使用別的attribute來生成ajax請求即可,假設原先的link爲,
<a href="www.google.com"/>
現在只需寫成,
<a href="#" data-rel="www.google.com"/>
並且在javascript中添加這樣一段即可
$(a).click(function(e) {
e.defentDefault();
var url=$(this).data(rel);
window.location.url;
});
當然,也可以使用<a href=" void(0);" data-rel="www.google.com"/>,其中 void(0)於#的區別在於前者會停留在頁面保持不動,後者會進行本頁刷新;並且使用前者可以避免在響應qing請求時忘記給返回值;第三使用前者可以避免忘記處理throw exception的情況。