记录准备好的火灾,但其附加功能没有

时间:2014-09-04 18:53:51

标签: javascript jquery html ajax web

我是一名内心的应用工程师,也是Javascript的新手,但我很快就学习了,因为我在办公室完成了一项任务,包括将我们的内部测试网站移植到新的用户界面。显然,我会尝试发布一些代码,以免损害公司可能认为敏感的任何内容。我已经搜索了这个问题的答案,在将$.isReady放入Chrome调试器并接收到true之后,我挥挥了白旗并决定在这里询问。

我有一个奇怪的问题,我的$(document).ready()调用会触发,但.ready()参数中包含的函数却没有。这是函数本身:

 $(document).ready(function () {
        $("p").text("The DOM is now loaded and can be manipulated.");
        $.getJSON('/Home/RetrieveServersJson', function (data) {
            servers = data;
            for (i = 0; i < servers.length; i++) {
                if (servers[i].IsGT)
                    gtServers[length] = servers[i];
                else
                    mrSixSservers[length] = servers[i];
            }
            alert(servers.length + " " + mrSixSservers.length + " " + gtServers.length);
        });
    });

正如您可能已经猜到的那样,开头的行只是一个修改<p>元素的测试,该元素最初表示“尚未准备好”。该网站正在运行jQuery 1.10.2。以下是我已经确定的一些事情:

  1. 根据我的判断,对$(document).ready()的呼唤开火了。我已经从这个事实中推断出这个事实,即函数上的断点停在那里,然后我可以在调用结束之前逐步浏览jQuery库,但是它永远不会进入处理函数,即使我在那里放了一个断点而是返回到源代码的顶部。
  2. 我很确定我可以认为这不是我的脚本引用的问题。我正在使用bundle来保存脚本,但这里是呈现的脚本在页面上的样子:

    <script src="/Scripts/jquery.min.js"></script>
    <script src="/Scripts/jquery-ui.custom.min.js"></script>
    <script src="/Scripts/bootstrap.min.js"></script>
    <script src="/Scripts/excanvas.min.js"></script>
    <script src="/Scripts/jquery.flot.min.js"></script>
    <script src="/Scripts/jquery.flot.resize.min.js"></script>
    <script src="/Scripts/jquery.sparkline.min.js"></script>
    <script src="/Scripts/fullcalendar.min.js"></script>
    <script src="/Scripts/jquery.jpanelmenu.min.js"></script>
    <script src="/Scripts/jquery.nicescroll.min.js"></script>
    <script src="/Scripts/unicorn.js"></script>
    <script src="/Scripts/unicorn.dashboard.js"></script>
    

    另外,我有另一个页面使用完全相同的脚本引用,我在那里测试了一个文档就绪函数,它运行得很好。

  3. 我所有其他Javascript函数和jQuery调用都完全按照预期工作。
  4. 我已经尝试将ready函数减少到除了警报调用之外什么都没有用。我将警报调用更改为<p>元素中的更改,以查看DOM是否在准备中被延迟。
  5. 此时,我认为DOM可能永远不会显示出来。但是,正如我之前提到的,我将$ .isReady放入Chrome调试器控制台,它返回true。
  6. 没有语法错误;我已经完成并确保所有花括号都匹配。
  7. 实际上,除了Uncaught Invalid dimensions for plot, width = null, height = null之外,控制台不会显示任何错误,这会在jquery.flot.min.js中随时加载。
  8. 任何人都知道什么可能导致$ .isReady显示为true而$(文档).ready()函数只是不会触发?

3 个答案:

答案 0 :(得分:3)

如果我理解正确的话,你的第4点就会说话。要确认,您是说您用以下内容替换了问题中发布的代码:

$(document).ready(function(){
    alert("I am here");
});

它不起作用?

如果是这样,那么问题肯定出现在你引用的一个脚本库中。

正如测试一样,我可以建议:

  1. 除了以上所有的js代码&#34;我在这里&#34;测试

  2. 使用您在上面发布的细分列表替换捆绑的库:

  3. 注释掉所有上面的库(除了jQuery,当然,因为你正在测试它)并一次添加一个,直到你找出罪魁祸首。

  4. 如果&#34;我在这里&#34;在单独引用脚本时工作,然后脚本包就会出现问题。

答案 1 :(得分:0)

尝试添加

$.ajaxSetup({
  "error":function() { $("p").text("The DOM is now loaded but I got ajax error");  }
});

答案 2 :(得分:0)

我会重新重新检查脚本引用。代码很好。

您可以尝试删除引用,并添加一些托管库,以确保。

<p>

http://jsfiddle.net/fcoeudnp/

修改

您还可以通过以下方式检查jQuery是否已准​​备就绪:

if ( jQuery.isReady ) {  
    alert('jQuery is ready');
}