我想创建一个页面,允许IT人员从列表中选择一些服务器,然后执行操作,然后单击go。然后让页面上的textarea更新,并在完成时更新每个操作的状态。每个服务器维护任务可能需要一两分钟。当每个服务器完成所选任务时,他们希望在页面上看到更新。
不确定在前端使用哪些技术。后端根本不是问题。我可以轻松获取服务器的完整列表,在每个服务器上执行操作,然后返回完整列表,以及每个服务器的结果。但是,在获得更新之前,没有人愿意等待所有服务器完成。
通常我会使用ajax来更新页面的一部分,但这只是针对单个调用/响应。我想如果我使用javascript循环通过ajax为每个服务器调用php脚本,那么javascript循环将阻止UI更新,直到javascript函数完成。
有什么想法吗?
答案 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。