如何识别ajax已提交请求但等待响应?

时间:2015-04-28 10:16:18

标签: javascript jquery ajax asynchronous

我有一个ajax请求,需要1分钟才能得到回复。用户输入的数据将在该请求中提交。

所以我要像这样向客户展示两条成功消息。

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处于挂起状态以接收响应时ajax请求之后的消息。

2 个答案:

答案 0 :(得分:2)

我认为您可以使用当前的解决方案,只需确保编写错误处理程序。如果用户与Internet断开连接,错误处理程序将在函数返回后几乎立即触发,因此浏览器很可能甚至不会呈现成功消息。

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");
}

答案 1 :(得分: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/