使用jquery';刷新后的s show()

使用jquery';刷新后的s show(),jquery,show,document-ready,Jquery,Show,Document Ready,我在每个文件中都有这个div: <div id="header" class="hide" style="top: 0px; width: 100%; z-index: 1000;"> 我的问题是: 我正在经历一种非常奇怪的行为,有两种情况: 场景1(确定): 文件准备就绪,显示标题 单击链接 将加载新文档并显示#标题 情景2(问题): 文件准备就绪,显示标题 执行浏览器刷新(使用F5键) 新文档已加载,但并不总是显示#标题 我的第一个想法是:“文档仍在加载,可能还没有标题”,但

我在每个文件中都有这个div:

 <div id="header" class="hide" style="top: 0px; width: 100%; z-index: 1000;">
我的问题是:
我正在经历一种非常奇怪的行为,有两种情况:

场景1(确定):

  • 文件准备就绪,显示标题
  • 单击链接
  • 将加载新文档并显示#标题
  • 情景2(问题):

  • 文件准备就绪,显示标题
  • 执行浏览器刷新(使用F5键)
  • 新文档已加载,但并不总是显示#标题
  • 我的第一个想法是:“文档仍在加载,可能还没有标题”,但我的console.debug证明这不是问题所在

    发生了什么事?
    jQuery的show()和刷新是否存在众所周知的问题? 还请注意,我正在阻止缓存ajax调用。我仔细检查了ajax响应,它带来了正确的数据(document).ready(函数(){
    $(document).ready(function () {
    
        $("#loading-header").show();
    
        $.ajax({
            cache: false,
            url: '/PersonsAjax/Header',
            success: function (data) {
                $("#loading-header").hide();
                //console.debug("Is there a header? " + $("#header").size());
            }
          }).done(showHeader());
        });
        //add a looping function to check for header
        function showHeader(){
             var TO = 0;
             var header = document.getElementById('header');
             if(header){
               header.style.display="block";
             }else if( TO < 10 ){
               setTimeout(showHeader,100);
               TO++;
             }else{
              console.log("showHeader Timed out");
             }
         }
    
    $(“#加载标题”).show(); $.ajax({ cache:false, url:“/PersonsAjax/Header”, 成功:功能(数据){ $(“#加载头”).hide(); //调试(“是否有头?”+$(“#头”).size(); } }).done(showHeader()); }); //添加循环函数以检查标头 函数showHeader(){ var-TO=0; var header=document.getElementById('header'); 如果(标题){ header.style.display=“block”; }否则,如果(至<10){ setTimeout(showHeader,100); TO++; }否则{ 日志(“showHeader超时”); } } Ajax有一个done函数,因为onsuccess只是从httpResponse请求的,而不是实际完成的。看看他们是如何在jQuery Ajax API文档中编写的

    您可以尝试使用循环

    我将使用
    $(window.load(function(){})
    而不是
    $(document).ready(函数(){}),在本例中

      $(window).load(function() {
         $("#loading-header").show();
    
            $.ajax({
                async: true,
                type: 'GET',
                url: '/PersonsAjax/Header',
                data: {},
                success: function (data) {
    
                    $("#loading-header").hide();
    
                    console.debug("Is there a header? " + $("#header").size());
                    $("#header").show();  // **** PROBLEM *****
                }
    
    
        });
    });
    

    您是否尝试过在超时时间结束该节目,以查看是否存在加载冲突<代码>设置超时(函数(){$(divToShow).show();},2000)如果它这样做,则很可能是Dom内容问题。另外,我相信ajax有一个
    done()
    功能,这应该是您在展会上看到的。我试图通过“console.debug”来证明这不是dom加载问题。如果我发现这是一个加载问题,我能做什么?因为超时作为最终解决方案不是很优雅。另外,我应该提到,在控制台中执行$(“#header”).show()一段时间后确实会显示标题。好的,这是一个加载问题。因此,您应该做的是添加doneI进行了一些“刷新”测试,但有时仍会显示#标题,有时则不显示。不过,它似乎提高了“显示速率”。我使用循环函数进行了更新,但它确实有一个超时,无法创建无限循环。$(window.load)和$(document.load)之间有什么区别?我用以下回答自己:,听起来是答案,让我试着将其标记为已接受。它确实有效,抱歉,延迟接受答复。现在我仍然很好奇什么时候应该使用$(document.ready vs$(window.load)。我确实理解它们之间的区别,但要说在其他场景中应该使用哪一种并不容易
      $(window).load(function() {
         $("#loading-header").show();
    
            $.ajax({
                async: true,
                type: 'GET',
                url: '/PersonsAjax/Header',
                data: {},
                success: function (data) {
    
                    $("#loading-header").hide();
    
                    console.debug("Is there a header? " + $("#header").size());
                    $("#header").show();  // **** PROBLEM *****
                }
    
    
        });
    });