作為一個程序員,遇到兼容性問題真的很苦惱,尤其是對我這種前端小菜雞來說遇到了甚是凄慘。一般來說兼容性問題出現率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。