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

时间:2022-06-17 04:23:55
 $("#link").click(function(){
    $.ajax({
        type: 'GET',
        dataType: 'jsonp',
        url: 'http://test.local.com/getdetail',
        data:{id:1},
        success: function(response){
            //IE6不执行
            alert("jsonp success");
        },
        error: function(request, status, error){
            
        }
    }); })

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

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

 $("#link").click(function(evt){
    $.ajax({
        type: 'GET',
        dataType: 'jsonp',
        url: 'http://test.local.com/getdetail',
        data:{id:1},
        success: function(response){
            //IE6也可以执行
            alert("jsonp success");
        },
        error: function(request, status, error){
            
        }
    });
//IE6 hack
 evt.preventDefault();
})

以上转自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

还可以参考  http://www.cnblogs.com/mr189/p/3705032.html

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