【问题标题】:Loading ASP.NET bundled Javascript asyncronosly, then calling a callback异步加载 ASP.NET 捆绑的 Javascript,然后调用回调
【发布时间】:2016-04-08 23:07:59
【问题描述】:

我有一个页面,在加载时,它会向端点发送 AJAX 调用以获取 HTML 并将该 HTML 注入页面。该 HTML 包含由 ASP.NET BundleConfig 的 @Scripts.Render() 方法生成的 <script>s。这使我们能够在 QA 和生产环境中缩小 Javascript,并在我们的本地开发环境中调试就绪的 Javascript

我的问题是我需要在页面上加载外部 Javascript 文件,一旦加载,就从该文件中运行一个函数。通常,HTML 块看起来像:

<script src="/js/file1.js" />
<script src="/js/file2.js" />
<script>
    $(function(){
        // function included in file2.js
        myFunction();
    });
</script>

我的问题是因为页面的 DOM 已经加载,Jquery 的就绪块中的myFunction(); 立即运行; file1.jsfile2.js 仍在加载中。这显然会遇到myFunction is undefined 错误。

有没有办法在异步加载包含 Javascript 文件的 HTML 时使用 ASP.NET 的捆绑包?

【问题讨论】:

    标签: javascript asp.net-mvc dom-events asp.net-bundling asynchronous-javascript


    【解决方案1】:

    一个简单的解决方法是使用$(window).load()

    $(document).ready() 在代码中出现时按顺序运行。

    $(window).load() 将在所有内容加载后运行,因此您可以尝试这个而不是试图找出一个复杂的方法 - 因为这应该可以工作。 - 只是一个建议。

    <script src="/js/file1.js" />
    <script src="/js/file2.js" />
    <script>
        $(window).load(function(){
            // function included in file2.js
            myFunction();
        });
    </script>
    

    【讨论】:

    • 我喜欢这个主意。我试试看。
    • jQuery 通常可以在您的大脑被复杂的过度杀伤性想法超载时拯救这一天!让我知道它是否有帮助@FillipPeyton
    • 似乎不起作用。我认为因为窗口已经加载并且因为事件处理程序是在加载window 之后创建的,所以处理程序没有被命中。
    • 您可以使用 javascript 函数同步加载您的脚本吗?这对你有用吗?
    • 我不这么认为,因为我需要使用Scripts.Render() 来根据环境应用适当的缩小/混淆。
    猜你喜欢
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2012-10-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    相关资源
    最近更新 更多