2016-01-10 54 views
0

我有这个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个recors。我现在所做的是在屏幕上添加一个微调器,以向用户反馈请求正在工作(由AjaxStart和AjaxStop触发)。

在通话的完整功能将重复一下PHP脚本将回波的终点。

我想要做的是有一个计数器,将在脚本执行过程中更新,我可以说“X记录超出4.000处理” 在脚本方面,我没有问题来计算数字的处理记录和整体记录数。 如何更新脚本以显示进度?

+0

您保存完成的动作是文件或数据库,然后做一套Ajax请求查询该文件或数据库,并得到结果作为第一个PHP脚本工作 – adeneo

+0

没有选择当前请求接收反馈的PHP脚本反馈? –

+0

不是真的,你要推*(SSE或套接字)*到客户端的进步,或者只是轮询它使用Ajax,你必须与其他Ajax调用做到这一点,因为你不能用AJAX返回的谐音,并且仍然继续工作等等。它通常比第一个假设更难,你不能仅仅依靠jQuery的'progress'处理器来处理这样的事情。 – adeneo

回答

2

你有几个选项。

1)右键时请求启动就可以开始查询不同的端点是用作出的已处理的,像@adeneo建议记录数。每次处理记录时都不必写入文件。您可以将其存储在内存中,并确保您必须处理请求进入进程的路由处理程序可以访问相同的内存。

2)实现您的服务器上的WebSocket端点压出的处理的记录数。基本上,在服务器上,您将调用该Websocket库代码来推进进度。你还必须在Javascript方面创建一个Websocket连接,这是微不足道的,并且听取这些消息。

+1

关于第1点,应该注意的是PHP会话在访问同一个会话数据的多个Ajax请求中存在问题,所以这通常不是一个选项,并且可能会导致很多悲伤(在那里); – adeneo