2015-04-28 133 views
0

我有一個ajax請求,需要超過1分鐘才能得到響應。用戶輸入的數據將在該請求中提交。如何識別ajax已提交請求但等待響應?

所以我要爲這樣的客戶端顯示兩條成功消息。

1)ajax將數據發送到服務器後未收到即時響應,「數據成功提交」。如果它立即收到回覆,那肯定會出錯。 2)現在,用戶可以在同一頁面上等待,看看第二個成功消息「文件生成成功」,在服務器完成長時間處理後,或者他可以導航到其他頁面,甚至可以註銷。但它不會影響在服務器上運行的進程,因爲它將是異步進程在單獨的線程中運行。

但我不知道如何識別ajax已發送數據到服務器,但等待接收響應?我可以簡單地通過

function sendData(){ 
    $.ajax({ 
     url: ..., 
     type: ..., 
     data: ..., 
     success: function(data){ 
      $("#success-message").html("File genration sucessfull"); 
     } 
    }); 
    $("#success-message").html("Data successfully submitted"); 
} 

顯示成功消息,但「數據成功提交」將顯示,即使客戶端是從互聯網上斷開。這就是爲什麼我需要在ajax請求處於掛起狀態以接收響應時顯示「數據成功提交」消息。

+0

我認爲你需要similer http://stackoverflow.com/questions/755885/how-do-i-make-jquery-wait-for- an-ajax-call-to-finish-before-it-returns –

+0

@ManishShukla,不..與我的問題無關。 –

+1

使用'beforeSend'作爲'success'。在Ajax開始工作之前,您可以爲用戶顯示一個彈出窗口。這意味着,現在發送將開始。並且使用'錯誤'情況來捕獲錯誤。 – vaso123

回答

2

我認爲你可以使用當前的解決方案,只要確保寫一個錯誤處理程序。如果用戶與互聯網斷開連接,錯誤處理程序將在函數返回後立即觸發,因此瀏覽器甚至不會呈現成功消息。

E.g:

function sendData(){ 
    $.ajax({ 
     url: ..., 
     type: ..., 
     data: ..., 
     error: function(data){ // callback triggers almost directly after returning 
      // "success-message" not a very good name 
      $("#success-message").html("Error occurred"); 
     }, 
     success: function(data){ 
      $("#success-message").html("File generation successful"); 
     } 
    }); 
    $("#success-message").html("Data successfully submitted"); 
} 
+0

該死的,我爲什麼不這樣想。有時當它錯過一個簡單的邏輯時,它會讓人惱火:) –

0

如果你的AJAX異步async:true; 你總是有回調的事件。 例如,

success: function (json) { 
           console.log('success:'+json) 
          }, 
          complete: function (msg,a,b) { 
           console.log('complete :'+msg) 
          }, 
          error : function(msg,a,b){ 
           console.log('error:'+msg); 
          } 

參考http://api.jquery.com/jquery.ajax/更多的參考

+1

Ajax始終是異步的,除非您將其指定爲'async:false;' –