如何在Node.js中渲染页面之前添加加载屏幕?

时间:2019-04-17 13:03:36

标签: javascript node.js server ejs

在主页上,我有一个表格。填写func_4 <- function(myp, DT) { myp = Filter(Negate(is.null), param) exs = Map(function(var, val) call("%in%", var, val), var = sapply(names(myp), as.name), val = myp) exi = Reduce(function(x, y) call("&", x, y), exs) ex = call("[", x = as.name("DT"), i = exi) # eval(as.call(c(as.list(ex)))) eval(ex) } microbenchmark( (DT[do.call(pmin, Map(`%in%`, DT[, names(param), with = FALSE], param)) == 1L]), (DT[rowSums(mapply(`%in%`, DT[, names(param), with = FALSE], param)) == length(param)]), (DT[do.call(CJ, param), on = names(param), nomatch = NULL]), (DT[expand.grid(param), on = names(param), nomatch = NULL]), (DT[DT[, all(mapply(`%in%`, .SD, param)), by = 1:nrow(DT), .SDcols = names(param)]$V1]), (func_4(myp = param, DT = DT)), times = 200) min lq mean median uq max neval 446.656 488.5365 565.5597 511.403 533.7785 7167.847 200 454.120 516.3000 566.8617 538.146 561.8965 1840.982 200 2433.450 2538.6075 2732.4749 2606.986 2704.5285 10302.085 200 2478.595 2588.7240 2939.8625 2642.311 2743.9375 10722.578 200 2648.707 2761.2475 3040.4926 2814.177 2903.8845 10334.822 200 3243.040 3384.6220 3764.5087 3484.423 3596.9140 14873.898 200 操作后,将执行该操作。在POST事件处理程序中,我使用形式的给定数据创建了执行python文件的子进程。子进程返回一个promise,返回后,我呈现所需的页面。在呈现页面之前,浏览器在URL字段旁边显示加载动画(重新加载按钮保持旋转)。我已经设计了自己的加载动画,在呈现页面之前,我希望该动画在页面上运行。我应该在脚本中的哪个位置添加函数来完成它?

POST

编辑(清晰): python脚本大约需要15秒钟才能运行。因此,该页面直到完成后才会呈现。因此,客户端js文件不会加载,因为它们包含在要呈现的页面中。我想显示动画,直到服务器响应。

1 个答案:

答案 0 :(得分:0)

这不是节点的问题,而是浏览器的问题。您必须将旋转事件附加到POST事件的承诺或响应中。

最简单的解决方案是:您通过Ajax发送POST,显示微调框并等待响应。如果响应有效,则EJS将删除您的表单并显示新页面。如果响应无效,则隐藏微调框。

使用类似这样的内容:

$('#form').submit(function(e){
    e.preventDefault()
    $.ajax({method:'POST',
        data:this.serialize(),
        success: function(data){
            if(!data){
                $('#spinner').hide();
                alert ('Your form is invalid!')
            }}})
})