做为一个程序员,遇到兼容性问题真的很苦恼,尤为是对我这种前端小菜鸡来讲遇到了甚是凄惨。通常来讲兼容性问题出现率Chrome < IE < Firefox (╯°Д°)╯︵┴┴ 。html
言归正传,最近遇到了几回ajax兼容性问题,所以进行了概括总结,已备之后查看。前端
functiondealMessageById(messageId,dealFlag)
{
$.ajax({
url: getRootPath()+ "/usercenter/message/UserMessage.do?method=DealMessageById",
type:"post",
async:false,//通常都不写,默认为true。具体信息看下面
data: {"messageId": messageId,"dealFlag": dealFlag
},
dataType: 'json', //data值类型
contentType:"application/x-www-form-urlencoded; charset=UTF-8",
success:function(data) {if(data.code == 200)
{
systemMessageInit();
refreshMessage();
$("#systemTable").html("系统消息("+data.siteInforCount+")");
}else{
dialog.alert('失败', '失败');
}
},
error:function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);程序员
}
});
};
常见状况:json
1.若是你是火狐浏览器(Firefox),出现错误调用error方法或者ajax请求了屡次,那么极有多是异步请求的缘由。跨域
添加 async : false ,浏览器
-> async. 默认是 true,即为异步方式,$.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.ajax里的success方法,这时候执行的是两个线程。服务器
-> async 设置为 false,则全部的请求均为同步请求,在没有返回值以前,同步请求将锁住浏览器,用户其它操做必须等待请求完成才能够执行。app
2.后台返回的dataType类型和前台js写的不一致会跳入error异步
传的不是json格式的数据就不用写 dataType : 'json' ,
json格式错误也会跳入error.{"test":1} 因此要注意格式。
在不须要返回值的状况下,扔按模板格式,设置了dataType:"json",参数;这时候,ajax传值正确时,出现200返回成功状态下报错的特殊状况。
3.url:'http://192.168.1.100:8080/Xxx
若是你请求的数据不在本地或者不在同一服务器中,那么就多是跨域问题,要用jsonp,即dataType :'jsonp' , 固然这意思最基础的方法,jsonp和json的格式仍是有点小区别的: jsonp比json多了个方法,即 json= " json格式数据 ",jsonp= "方法名(json格式数据)",至于跨域的详细的解释和解决方法找度娘吧。
不常见的状况:
1.data没有写
解决方法:data为空也必定要传"{}";否则返回的是xml格式的。并提示parsererror. data:"{}"。
2.url路径有中文
解决方法:去掉中文。
3.传的数据格式ajax不支持
解决方法:换成json或其余ajax支持的数据格式。
4.字符编码不匹配
解决方法:统一UTF-8。