如何在服务器端任务进程中多次更新网页?

时间:2017-05-01 23:18:42

标签: javascript php lamp

我想创建一个页面,允许IT人员从列表中选择一些服务器,然后执行操作,然后单击go。然后让页面上的textarea更新,并在完成时更新每个操作的状态。每个服务器维护任务可能需要一两分钟。当每个服务器完成所选任务时,他们希望在页面上看到更新。

不确定在前端使用哪些技术。后端根本不是问题。我可以轻松获取服务器的完整列表,在每个服务器上执行操作,然后返回完整列表,以及每个服务器的结果。但是,在获得更新之前,没有人愿意等待所有服务器完成。

通常我会使用ajax来更新页面的一部分,但这只是针对单个调用/响应。我想如果我使用javascript循环通过ajax为每个服务器调用php脚本,那么javascript循环将阻止UI更新,直到javascript函数完成。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

jQuery具有执行异步HTTP Ajax请求(http://api.jquery.com/jquery.ajax)的方法。创建一个递归javascript函数以进行ajax调用。获得用户在UI上选择的服务器列表和所需操作后,请调用RecursiveAjax函数。对于每个结果,调用另一个函数来更新UI。

function RecursiveAjax(serverArray, currentIndex, operation)
{
  var operationResult = "";
  $.ajax({
         type: "GET"
         url:  "ServerOperation.php",
         data: {Operation: operation, Server: serverArray[currentIndex]},
         success: function (result) {
             operationResult = JSON.stringify(result);
             UpdateUI(operationResult);
         }
     });
     var nextIndex = currentIndex + 1;
     if(nextIndex < serverArray.length) {
       RecursiveAjax(serverArray, nextIndex, operation);
     }
}

答案 1 :(得分:0)

您可以使用两种技术。

1- websocket https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications

2-推送通知https://developers.google.com/web/fundamentals/engage-and-retain/push-notifications/

在websocket中,浏览器标签必须保持打开状态。在推送通知中没有。 Websocket支持许多浏览器,推送通知只有chrome和chromium。