Ajax出现error常见情况(详细版)-火狐浏览器(Firefox)兼容性问题
作为一个程序员,遇到兼容性问题真的很苦恼,尤其是对我这种前端小菜鸡来说遇到了甚是凄惨。一般来说兼容性问题出现率Chrome < IE < Firefox (╯°Д°)╯︵┴┴ 。
言归正传,最近遇到了几次ajax兼容性问题,因此进行了归纳总结,已备以后查看。
function dealMessageById(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);
//以上3个值所对应的意义进入另一篇博文status、readyState、textStatus状态查看
}
});
};
常见情况:
1.如果你是火狐浏览器(Firefox),出现错误调用error方法或者ajax请求了多次,那么极有可能是异步请求的原因。
添加 async : false ,
-> async. 默认是 true,即为异步方式,$.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.ajax里的success方法,这时候执行的是两个线程。
-> async 设置为 false,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
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。