大家好,
我遇到了一些javascript / symfony问题。我有一个页面需要超过10个secondes加载(其中有很多表格)。
问题是,当页面出现时,只有 html 才有效,当用户开始使用表单时,它不起作用(导致其堆栈ajax请求并且不返回任何内容)。
here an example set of ajax reponses for this page
所以我通过为每个提交设置加载状态来处理其中的一部分。 (我用过gasparesganga loading library。)
$(document).ajaxStart(function(){
$.LoadingOverlay("show");
});
$(document).ajaxStop(function(){
$.LoadingOverlay("hide");
});
当页面完全加载时,一切都很好。
但问题仍然存在于页面登陆和完全加载的时间之间。 我试图在用户登录页面时显示一个微调器:
$.LoadingOverlay("show");
window.onload = function() {
console.log('window loaded');
$.LoadingOverlay("hide");
};
或尝试替换代码开头的代码:
<script>
$("body").LoadingOverlay("show");
</script>
但这一切都不起作用;因此,当我登陆页面时,我首先看到HTML 8秒,然后它显示了微调器。
所以我的问题涉及到Symfony在这方面发挥作用的事实:控制器执行他的计算并显示视图,直到它获得完整的信息 - 然后加载JS。 如果有人能给我一些提示,那就太好了!
感谢阅读和帮助。
优优
答案 0 :(得分:0)
其实我刚刚找到了如何获得它。 如果控制器花了太多时间来响应: 您可以在每个链接上放置一个加载屏幕(onclick())到重页面。 无需使用.hide()隐藏它,它将重定向... 在沉重的页面中,您在主体前面的标题中添加了一个脚本相同的加载屏幕:
document.write('<div class = "loader centered" style="...">');
一旦你登陆页面,这将开始加载屏幕。 因此,当页面完全加载时,您可以删除视图代码底部的加载状态:
$(function() { //equals window.onload or ready
$('.loader').hide();
// ... retrieve opacity, pointer-events etc...
现在由于PHP只有一点点刷新(无法躲避它 - 完整的njs-),但它可以让你更好地控制用户操作。
答案 1 :(得分:0)
我认为您需要一个不依赖于Jquery库的加载器,因为Jquery尚未加载,所以加载器不会出现。也许你需要搜索一个js完整的装载机。祝你好运!