1. 程式人生 > >Ajax出現error常見情況(詳細版)-火狐瀏覽器(Firefox)相容性問題

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。