2014-05-22 36 views
0

好吧,我想要做的是根據其錯誤代碼警告ajax錯誤,我在網站上有很多ajax調用,所以我使用全局ajax錯誤處理函數。如何獲得ajax調用的默認錯誤

但我想要的是,如果一些Ajax調用已經有默認錯誤,那麼顯示那裏不全球。

$(document).ready(function(){ 
    $(document).ajaxError(e,xhr,opt){ 
     if(xhr.error){ 
      //Don't do anything 
     } else { 
      alert('You have an error'); 
     } 
    } 
} 

第一個功能:

$.ajax({ 
    type:"post", 
    url:"page.php", 
    data:"name=mohit&lastname=bumb", 
    error:function(){ 
     alert('error'); 
    } 
}); 

二功能:

$.ajax({ 
    type:"post", 
    url:"page.php", 
    data:"name=mohit&lastname=bumb", 
}); 

因此,在第二情況下,它應該顯示你有一個錯誤,並在第一種情況下只是錯誤

+0

確定,但剛打字misatake不會發出 –

+0

我不認爲你能做到這一點,如何將全球錯誤處理程序知道AJAX功能有它自己的 – adeneo

+0

一些參數也許像一個錯誤處理程序如果錯誤參數存在,那麼它有它自己的錯誤,否則沒有最簡單的邏輯,我認爲 –

回答

0

是的,你可以,但你必須重寫jQuery的默認$.ajax方法。檢查我在其中一個項目中使用的以下代碼。確保在jQuery之後加載腳本。

我的情況是 -

  1. 該網站有很多的AJAX的局部視圖,其不得不檢查用戶是否登錄或沒有。所以我不得不重寫jquery調用來檢查它。

  2. 我還必須在任何ajax調用時顯示加載器。

  3. 還有一件事,有些js是由ajax加載的,所以我添加了一個檢查url是.js文件還是普通的url。

我已經拿出了我的項目保密的敏感代碼。其餘的在這裏。這可能會幫助你。

$(document).ready(function() { 
    var oldjQuery = []; 
    oldjQuery["ajax"] = $.ajax; 
    oldjQuery["load"] = $.load; 
    var newOptions = []; 
    //override ajax 
    jQuery.ajax = function (options) { 
     newOptions["ajax"] = $.extend({}, options); 
      //override the success callback 
      newOptions["ajax"].success = function (data, textStatus, jqXhr) { 
       try { 
        if (options.url.indexOf('.js') <= -1) { 
         //this is a normal success call, do nothing 
        } 
       } 
       catch (err) { 
         //... my other codes, incase any error occurred 
       } 

       if (typeof options.success != 'undefined') { 
         //the ajax call has a success method specified, so call it 
         options.success(data, textStatus, jqXhr); 
        } 
      }; 

      //override the error callback 
      newOptions["ajax"].error = function (jqXhr, textStatus, errorThrown) { 
       try { 
        if (options.url.indexOf('.js') <= -1) { 
        //this is a normal success call, do nothing 
        } 
       }catch (y) { 
        //... my other codes, incase any error occurred 
       } 

       //the ajax call has an error method specified, so call it 
       if (typeof options.error != 'undefined') { 
        options.error(jqXhr, textStatus, errorThrown); 
       } 
      }; 

      return oldjQuery["ajax"](newOptions["ajax"]); 
     }; 

     //override load function 
    jQuery.load = function (url, data, completeCallback, ignore) { 
     newOptions["load"].completeCallback = function (d, textStatus, jqXhr) { 
      try { 
       if (url.indexOf('.js') <= -1) { 
        //codes 
       } 
      } catch (err) { 
       try { 
        //codes 
       }catch (err2) { 
       } 
      } 

      if (typeof completeCallback != 'undefined') { 
        //call the default completed callback 
        completeCallback(d, textStatus, jqXhr); 
       } 
      }; 

      return oldjQuery["load"](url, data, newOptions["load"].completeCallback); 
     }; 
});