首页 > 代码库 > IE6—在链接click事件的响应函数中发送jsonp请求不生效

IE6—在链接click事件的响应函数中发送jsonp请求不生效

 1 $("#link").click(function(){ 2     $.ajax({ 3         type: ‘GET‘, 4         dataType: ‘jsonp‘, 5         url: ‘http://test.local.com/getdetail‘, 6         data:{id:1}, 7         success: function(response){ 8             //IE6不执行  9             alert("jsonp success");10         },11         error: function(request, status, error){12             13         }14     });15 16 })

     1.现象:在IE6下,发送jsonp请求的script脚本,在建立http连接之后,就会停止发送请求,问题很诡异,调试很久找不到原因。google了一下,在stackoverflow找到答案(看看人家国外的问答网站,就是给力啊)。

     2.解决方案:在click响应函数中,调用evt.preventDefault()。如果evt.preventDefault()不能执行(某些特殊情况),那就使用setTimeout调用jsonp(猜测,估计没问题)

 1 $("#link").click(function(evt){ 2     $.ajax({ 3         type: ‘GET‘, 4         dataType: ‘jsonp‘, 5         url: ‘http://test.local.com/getdetail‘, 6         data:{id:1}, 7         success: function(response){ 8             //IE6也可以执行  9             alert("jsonp success");10         },11         error: function(request, status, error){12             13         }14     });15    //IE6 hack16     evt.preventDefault();17 }) 

以上转自http://blog.csdn.net/cwb0525/article/details/7744140

 

解决IE6 JSONP无响应的问题。

在项目开发中jsonp的请求在IE7,IE8,FF,Chrome,Safari中都木有问题。
未读IE6死活不出来结果。

后来找到了问题所在,在调用这个jsonp的方法是通过一个<a>标签的onclick事件绑定的。

<a href="javascript:;" onclick="dothing()" >jsonpRequest</a>


问题就出在这里了。 
其中doting()为一个包含jsonp请求的方法名。
这里的href=“javascript:;” 原本的作用是为了让用户点击的时候不响应,不让浏览器跳回顶部,不刷新页面。
但是同时在IE6中它也阻断了jsonp的回调函数。
导致无法继续执行。

解决办法就是,干掉href属性。直接一个光秃秃的<a>标签就好了。
如下:
<a onclick="dothing()" >jsonpRequest</a>

以上内容转自http://www.cnblogs.com/didi/archive/2010/12/31/1923378.html

 

根据上面两种方案,可以使用其他标签代替a标签,例如span标签