首页 > 代码库 > IE6 ajax解析parseerror

IE6 ajax解析parseerror

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="http://www.mamicode.com/#"]锚点,锚标记为空,则取默认值为#top,所有浏览器点击该a会跳转到页面顶部;

   a[href="http://www.mamicode.com/##"] 锚点,锚标记为#,IE下点击依然会跳转到页面顶部;

   a[href="http://www.mamicode.com/###"]空链接。

  以上三种情况,点击之后都会在地址栏追加锚点值,影响美观。