问题总结: http200被Aborted

问题描述:

1. a标签的href="javascript:void(0);"
2.a标签点击事件主要js
$('.rankItem').bind('click',function(){
    ……
    $('').html('');
    ……
});

问题表现:
Fiddler抓包结果:  aborted  http://XXX/M00/CD/24/tz0M9VSSyHAAAAAAAABejGfCxMY531.jpg(资源链接) 200
Http请求虽然返回200,但当前页面发出的http请求还未返回的就被客户端主动断开链接(Aborted),导致响应资源不能被完全加载到页面,例如出现图片等资源没法加载的问题。

本质原因:

临时解决方案:
延迟(100ms)执行页面资源的加载;
$('.rankItem').bind('click',function(){
    ……
     setTimeout(function(){
         $('').html('');
     },100);
    ……
});

临时解决方案原理和缺陷:
a标签的点击事件延迟100ms,页面的刷新或重定向在100ms内完成,100ms之后再对页面进行渲染,加载资源。
在网络条件比较好的情况下,这是没有问题的,但,如果所处的网络环境不好,在一定程度上是没办法保证该页面在100ms内可以返回,一旦100ms无法返回,就会执行a标签的 href="javascript:void(0);" ,从而把当前的页面进行重定向,而又当前页面发出的http请求(加载资源)但还未返回的就会被浏览器abort掉,因此这种方案在网络不好的时候会失效。

解决方案:
1、  onclick上加return false阻止浏览器执行 href="javascript:void(0);"  

2、  不用href="javascript:void(0);" 属性,相当于span标签,当然div或者span替换a标签也行,链接的手势可以通过样式style=“cursor:pointer;”。

番外方案:
event.preventDefault()。
该方法 用于取消事件的默认行为 ,存在浏览器兼容问题。
event.preventDefault()方法不被ie支持,在ie下需要用window.event.returnValue = false; 来实现。

function stopDefault( e ) { 
     if ( e && e.preventDefault ){ 
        e.preventDefault();
     } else { 
        window.event.returnValue = false;
     } 
}

问题拓展1:
2.
3.
     或

不同浏览器中标签的兼容性
 对于非IE内核浏览器 而言,3种写法都是可以的,基本没有什么区别。 对于IE浏览器或者IE内核的浏览器而言则不同:这不同主要体现在第2和3这二种写法上。  第3种IE内核有时候会不认  href="javascript:void(0);" 因而触发不了事件函数,导致点击没有任何反应。

第2、3种的区别:
"#"包含了一个位置信息,默认的锚点是#top 也就是网页的上端。 javascript:void(0) 仅仅表示一个死链接, 这就是为什么有的时候页面很长浏览链接明明是#可是跳动到了页首。 而javascript:void(0) 则不是如此,所以调用脚本的时候最好用void(0),或者
等, 采用这个方式 javascript:void(0) 实现点击事件时, 运行起来,如果页面内容很多,有滚动条时,页面不会乱跳,用户体验更好。

问题拓展2




你可能感兴趣的:(问题总结: http200被Aborted)