关于ajax部分方法与IE8冲突的问题
今天在一个项目中用到ajax的post提交数据时,发现firefox和google以及IE11都是正常的,
唯独IE8异常,左下角报错警告:“网页上有错误”。
刚开始以为IE8与ajax存在兼容性问题,网上查发现的确有人碰见类似的错误,但是根据错误种类,我排除了兼容性的问题
于是,只好采用排除法来检查了,发现有2处有问题:
$.post(
posturl,{orderstr},
function(data){
var obj = JSON.parse(data);
$('#notice').text(obj.msg);
});
第一处:posturl,{orderstr},此处应该为:posturl,{orderstr:orderstr},
firefox和google在参数没有名字时,默认会把参数值当做参数名,而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,转载时请注明出处及相应链接。