2015-05-18 96 views
3

我有一個網站,我依靠很多自定義API調用。我的API返回總是一個XML。每個Ajax成功回調之前的exec函數

目前,在每次開始和每$不用彷徨或$。員額我打電話,我有這樣的片段:

var root = $($.parseXML(data)).find("Response"); 

if (root.children("Type").text() == "Error") { 
    toastr.error(root.children("Content").text(), "Error " + root.children("ReturnCode").text()); 
    return; 
} 

不過,我覺得這個代碼是在我的頁面的一個多少冗餘,它使用了15次。

我試圖使用的$(document).ajaxSuccess(),但event.stopPropagation似乎並不在這兒工作

有沒有一種方法來「攔截」每一個Ajax調用的響應,做一些東西,並可能阻止對其他定義的成功函數的調用?

回答

2

我假設你有很多地方像這樣在你的代碼

$.ajax({ 
    method: "GET", 
    url: "someurl.html", 
    dataType: "xml", 
    success : function() { 
     var root = $($.parseXML(data)).find("Response"); 
     if (root.children("Type").text() == "Error") { 
      toastr.error(root.children("Content").text(), "Error " + root.children("ReturnCode").text()); 
      return; 
     } 
     // ... 
    }, 
    error : function(qXHR, textStatus, errorThrown){ 
     toastr.error(errorThrown, "Error " + qXHR.status); 
    } 
}); 

,你可以在創建一個通用的自定義AJAX功能塔,你可以重新使用

function baseAjaxCall(option, sCb) {  
    var ajaxOptions = { 
     method: option.method || "GET", 
     url: option.url, 
     dataType: option.dataType || "xml", 
     success : function(data) { 
      var root = $($.parseXML(data)).find("Response"); 
      if (root.children("Type").text() == "Error") { 
       toastr.error(root.children("Content").text(), "Error " + root.children("ReturnCode").text()); 
       return; 
      } 
      else { 
       sCb(root); 
      } 
     }, 
     error : function(qXHR, textStatus, errorThrown){ 
      toastr.error(errorThrown, "Error " + qXHR.status); 
     } 
    }; 
    //you can check for optional settings 
    if(option.contentType !== undefined){ 
     ajaxOptions.contentType = option.contentType; 
    } 

    $.ajax(ajaxOptions); 
} 

任何一個地方代碼你可以重新使用baseAjaxCall函數

baseAjaxCall({ url: "someurl.html" }, function(root){ 
// no need to chek for errors here! 
}); 

希望它是幫助!