如何显示Ajax请求进度

时间:2016-01-10 18:36:38

标签: php jquery ajax

我有这个ajax请求来更新我的数据库。

function ajax_submit(){
    var submit_val=$("#stato").serialize();
    dest="plan/new_bp1.php";
    $.ajax({
    type: "POST",
    url: dest,
    data: submit_val,
    success: function(data){ 
        data1=data.split("|");
        if(data1[0]=="Successo"){ 
        $("#spnmsg").fadeTo(200,0.1,
            function(){$(this).removeClass().addClass("spn_success").html(data1[1]).fadeTo(900,1)});
        }else if(data1[0]=="Errore"){
        $("#spnmsg").fadeTo(200,0.1,
            function(){$(this).removeClass().addClass("spn_error").html(data1[1]).fadeTo(900,1)});  
        }
    },
    complete: function(){
        setTimeout(function(){ $('.container').load('plan/home.php');},2000); 
    }
    });
}

调用脚本需要很长时间才能执行,因为它必须每次选择,精心制作并插入大约4.000个记录。我现在要做的是在屏幕上添加一个微调器,以便向用户提供请求正在运行的反馈(由AjaxStart和AjaxStop触发)。

在调用结束时,complete函数将回显php脚本将回显的内容。

我想要做的是在脚本执行期间更新一个计数器,我可以在其中说出类似于" 4.000处理过的X记录" 在脚本方面,我没有问题来计算处理记录的数量和整体记录的数量。 如何更新我的脚本以显示进度?

1 个答案:

答案 0 :(得分:2)

你有几个选择。

1)当请求开始时,您可以开始轮询一个不同的端点,该端点仅提供已处理的记录数,如@adeneo建议的那样。每次处理记录时都不必写入文件。您只需将其存储在内存中,并确保您必须处理进入请求的路由处理程序可以访问相同的内存。

2)在服务器上实现websocket端点,以推送已处理记录的数量。基本上,在服务器上,您将调用该Websocket库代码来推进进度。您还必须在Javascript端创建一个Websocket连接,这很简单,并且会监听这些消息。