2015-08-31 37 views
0

我有這個共同的JavaScript函數來處理我的ASP.NET Web窗體應用程序的所有Ajax請求:阿賈克斯完全沒有被調用

var xsrf_token, IsAjaxAsync = true; 
function callAjax(Handler, ajaxData, Cache, BeforeSend, Complete, Reset) { 
    var URL = "http://" + window.location.host + "/Handlers/" + Handler + ".ashx"; 
    $.retryAjax({ 
     url: URL, 
     type: "POST", 
     timeout: 5000, 
     retryLimit: 3, 
     data: JSON.stringify({ 
      XSRFToken: xsrf_token, 
      Data: ajaxData 
     }), 
     dataType: "json", 
     cache: Cache, 
     async: IsAjaxAsync, 
     beforeSend: BeforeSend, 
     success: function (data) { 
      var resp = parseInt(data); 
      if (resp != -10) { 
       Complete(data); 
      } else { 
       $.prompt("Please login to perform this operation.", { 
        title: "Logged Out", 
        close: function() { 
         window.location.href = "http://" + window.location.host + "/Login"; 
        } 
       }); 
      } 
     }, 
     complete: function() { 
      UpdateHistory(); 
     }, 
     error: function (jqXHR, textstatus, error) { 
      if (textstatus == 0) showConnectionError(); 
      if (Reset != null) Reset(); 
     } 
    }); 
} 

這個功能實際上是用這個插件調用AJAX:https://github.com/mberkom/jQuery.retryAjax

但是好像這個功能無法在各種狀況下打電話給complete回撥。是否發生錯誤,或請求成功,或者即使回調返回false或其他東西。

我試圖在第31行添加斷點,但它沒有到達那裏。請告訴我在各種情況下我怎樣稱呼這個UpdateHistory()?我不希望它在每個使用此函數的函數中調用。

我還想問的另一件事是,如果success卡在一些無限循環或一些長期的過程,那麼仍將調用complete?什麼是complete被跳過的各種情況?

回答

1

正如你可以在retryAjax source在21行看到,您的完整的回調被重寫,因爲這是一個非常簡單的插件,我建議你改變插件代碼,以適應自己的需要,通過應用下列變化:

ajaxParams.complete = function (jqXHR, textStatus) { 
    if ($.inArray(textStatus, ['timeout', 'abort', 'error']) > -1) { 
     this.tryCount++; 
     if (this.tryCount <= this.retryLimit) { 

      // fire error handling on the last try 
      if (this.tryCount === this.retryLimit) { 
       this.error = errorCallback; 
       delete this.suppressErrors; 
      } 

      //try again 
      $.ajax(this); 
      return true; 
     } 

     //window.alert('There was a server error. Please refresh the page. If the issue persists, give us a call. Thanks!'); 
     ajaxParams.myCompleteCallback(jqXHR, textStatus); 
    } 
    ajaxParams.myCompleteCallback(jqXHR, textStatus); 
}; 

,然後,而不是通過所謂的配套完整的回調,只是通過所謂的myCompleteCallback

+0

由於一個完整的回調。有效。 :) –