你的位置:快乐忆站 \ 前端 \ 文章正文

IE6下a标签发ajax请求的深坑

首先感慨下,这真的是个深坑啊,找了一下午才找到原因和解决方案,问题的定位应该是IE6的bug,可是他老爹一直未修复,现在他老爹也已经不管他了,所以修复bug是不可能了,只能想办法避免这个bug。可能我还太年轻吧,据说这个bug已经是业界的基本常识了,可是我却只能在踩到坑后才知道,不过还是要记录下,以免下次再踩坑。

忘了说了此坑还有一个前提就是,必须是手动触发ajax请求时才会产生,且a的href为‘javascript:;’或‘javascript:void(0);’。

先看个DEMO,注意用IE6打开,不然看不到效果。

分别点击两个链接,IE6下得到的结果是不一样的,但是其实差别就在一句代码,一句看似不需要的代码。先分析下现象吧,两次点击,请求截图如下:

两次分别发出的请求

很明显,第一次的请求前面有个警告图标,说明请求有问题,在来看看请求详情:

请求头为空 请求头正常

对比一下就知道,第一个请求根本没法出去,直接被浏览器给“拦截”了。我找了下往上的原因,大意就是“IE6中a标签执行顺序引起这个问题,IE6中a标签执行onclick在执行默认事件(即href跳转)之前,当触发了绑定的事件之后,那么处理完事件之后,如果不return false或者阻止默认事件,则会继续执行href跳转,IE6会认为页面跳转到其他页面或者页面重新刷新,则abort之前onclick事件中的请求。”,那么解决办法也就很明显了,在a标签执行onclick后阻止默认行为就能轻松解决这个问题。

好吧,此坑填完,舒畅!

(此文通过emlog自动发布插件发布)

« 上一篇

说两句吧:

*

*

正在回复: 取消

  1. 5#
    谢亮
    谢亮 Firefox 23.0 Windows 8 x64 Edition 2013-08-31 08:15 回复
    非常喜欢你的评论,哈哈
    小松
    小松 Google Chrome 29.0.1547.57 Mac OS X 10.8.5 2013-08-31 09:35 回复
    @谢亮:我感觉好挫的评论列表。。。
  2. 4#
    夏日博客
    夏日博客 Google Chrome 21.0.1180.89 Windows XP 2013-08-29 16:33 回复
    放弃IE6吧,问题太多了。
    小松
    小松 Google Chrome 29.0.1547.62 Windows 8 x64 Edition 2013-08-29 18:11 回复
    @夏日博客:公司的东西,没办法舍弃,你懂的
  3. 3#
    flyer
    flyer Google Chrome 26.0.1410.43 Windows 8 2013-08-28 10:36 回复
    有坑就填!~~
    小松
    小松 Google Chrome 29.0.1547.57 Windows 8 x64 Edition 2013-08-28 10:57 回复
    @flyer:必填无疑,哈哈~写着记录下~
  4. 2#
    小子
    小子 Google Chrome 30.0.1599.14 Mac OS X 10.8.4 2013-08-26 10:27 回复
    这是坑吗,chrome不也是这样处理的么。当你点击的时候之前的request会cancel
    小松
    小松 Google Chrome 29.0.1547.57 Windows 8 x64 Edition 2013-08-26 10:30 回复
    @小子:href设置为‘javascript:;’或‘javascript:void(0);’的处理方式IE6和chrome是不一样的!
  5. 1#
    黎健雄
    黎健雄 Google Chrome 28.0.1500.95 Windows XP 2013-08-25 18:36 回复
    技术小白看不懂。
    小松
    小松 Google Chrome 29.0.1547.57 Mac OS X 10.8.5 2013-08-25 19:16 回复
    @黎健雄:一点也不影响你来此参观~
1 2

随机日志:

推荐日志:

彩色标签:

sitemap