2015-04-28 65 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;' –