关于ajax部分方法与IE8冲突的问题

  • Jesse
  • 2016-05-06 18:04:00
  • 3174

今天在一个项目中用到ajaxpost提交数据时,发现firefoxgoogle以及IE11都是正常的,

唯独IE8异常,左下角报错警告:“网页上有错误”。

刚开始以为IE8ajax存在兼容性问题,网上查发现的确有人碰见类似的错误,但是根据错误种类,我排除了兼容性的问题

于是,只好采用排除法来检查了,发现有2处有问题:

$.post(
    posturl,{orderstr},
    function(data){
        var obj = JSON.parse(data);
        $('#notice').text(obj.msg);
    });

第一处:posturl,{orderstr},此处应该为:posturl,{orderstr:orderstr},

firefoxgoogle在参数没有名字时,默认会把参数值当做参数名,而IE8不会;

 

第二处:var obj = JSON.parse(data);应改为:var obj = $.parseJSON(data);

JSON.parse是绝大多数浏览器默认就支持的,但是较老的版本IE8以前的不支持,于是可以用jQuery库的$.parseJSON方法

(该方法为jQuery 1.4.1 新增)

其实$.parseJSON默认用的就是浏览器支持的JSON.parse方法,只不过判断了如果浏览器不支持词方法,将会用它自定义的方法

 

查看jQuery1.9.1源码就知道了:

parseJSON: function( data ) {
    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( data );
    }

    if ( data === null ) {
        return data;
    }

    if ( typeof data === "string" ) {

        // Make sure leading/trailing whitespace is removed (IE can't handle it)
        data = jQuery.trim( data );

        if ( data ) {
            // Make sure the incoming data is actual JSON
            // Logic borrowed from http://json.org/json2.js
            if ( rvalidchars.test( data.replace( rvalidescape, "@" )
                .replace( rvalidtokens, "]" )
                .replace( rvalidbraces, "")) ) {

                return ( new Function( "return " + data ) )();
            }
        }
    }

    jQuery.error( "Invalid JSON: " + data );
},


本文出自 showcj,转载时请注明出处及相应链接。