有一个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的情况。