标签:style blog class code java ext
IE6下,用a[href="javascript:void(0);"]或者a[href="javascript:;"]发起ajax|jsonp请求会出现请求成功,返回数据无法解析的情况,直接解析报错"parseerror",其他浏览器则解析正常,本地调试正常,放到服务器上,同一个ajax请求IE6会经常(偶尔会解析正常)出现问题。
<a href="javascript:;" id="btn">点击发送请求</a>
$("#btn").click(function(){ $.ajax({ url : "your address", dataType : "json", // |jsonp success : function(data){ // 非IE6能够正常执行成功回调 }, error : function(jqXHR, textStatus, thrown){ // IE6直接输出textStatus为parseerror错误 } }); });
究其原因,在于<a>的href属性为javascript:void(0)或者javascript:;。
"javascript:**"作为javascript的伪协议,给a标签的href赋空置,是期望生成一个空的href的a标签,自带鼠标手型,却又不作为<a>跳转, 语义化好,其他浏览器也能正常识别,但是伟大的IE6认为"此时<a>还存在默认的跳转行为,IE6会尝试刷新或重定向页面地址,且中断正在进行的请求,此时请求程序已经中断但是请求结果已经返回,则请求结果被搁置不能解析"。
解决的办法有几种:
1、更换a标签为其他,如span,div;
<span id="btn">点击发送请求</span>
$("#btn").click(function(){ $.ajax({ url : "your address", dataType : "json", // |jsonp success : function(data){ // 包括IE6在内浏览器能够正常返回 }, error : function(jqXHR, textStatus, thrown){} }); });
2、阻止a的默认事件
<a href="javascript:;" id="btn">点击发送请求</a>
$("#btn").click(function(e){ e.preventDefault(); $.ajax({ url : "your address", dataType : "json", // |jsonp success : function(data){ // 非IE6能够正常执行成功回调 }, error : function(jqXHR, textStatus, thrown){ } }); });
3、取消a的javascript:协议,换成###
<a href="javascript:;" id="btn">点击发送请求</a>
$("#btn").click(function(e) { $.ajax({ url: "your address", dataType: "json", // |jsonp success: function(data) { // 非IE6能够正常执行成功回调 }, error: function(jqXHR, textStatus, thrown) { } }); });
a[href="#"]锚点,锚标记为空,则取默认值为#top,所有浏览器点击该a会跳转到页面顶部;
a[href="##"] 锚点,锚标记为#,IE下点击依然会跳转到页面顶部;
a[href="###"]空链接。
以上三种情况,点击之后都会在地址栏追加锚点值,影响美观。
IE6 ajax解析parseerror,布布扣,bubuko.com
标签:style blog class code java ext
原文地址:http://www.cnblogs.com/mr189/p/3705032.html