jQuery Load函数未加载文件

nzk0hqpo  于 2023-03-17  发布在  jQuery
关注(0)|答案(2)|浏览(122)

我正在尝试使用Jquery的.load()方法将html代码加载到另一个html文件中。
我试过使用绝对路径访问文件,但仍然得到同样的错误。我也试过导航到绝对路径和文件,它将在浏览器中打开没有问题,所以它似乎不是一个访问问题。我还Map到最新版本的jQuery,而不是我的本地版本。
错误响应无法识别,这使得此问题更难解决:

更新代码:根据用户建议对代码进行了更改。

主HTML页面

<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

    <script type="text/javascript">
        jQuery(document).ready(function(){
            jQuery("#test").load("/menu.html", function(response, status) {

        if(status === 'error') {
            alert("Failed to load menu.html");
        }
        else {
            alert("Success!");
        }    
    });
});
</script> 
</head>

</head>

<body>
    <div id="test"></div> 
</body>

正在加载HTML页面

<ul>
                   <li><a href="index.html">Home</a></li>
                    <li>
                        <a href="article.html">Article</a>
                        <div class="uk-navbar-dropdown">
                            <ul class="uk-nav uk-navbar-dropdown-nav">
                                <li><a href="article.html">Scrollspy</a></li>
                                <li><a href="article-narrow.html">Narrow</a></li>
                            </ul>
                        </div>
                    </li>
                    <li><a href="faq.html">Faq</a></li>
                    <li><a href="contact.html">Contact</a></li>
                    <li><a href="components.html">Components</a></li>
                </ul>

如果任何人有任何输入或遇到类似的错误,请让我知道。

dgiusagp

dgiusagp1#

似乎有几个方面可能会导致问题-请考虑对代码进行以下调整:

正在加载HTML页面

<!-- <div id="menu"> Remove div with menu id -->

    <ul>    <!-- Add opening ul tag -->
        <li><a href="index.html">Home</a></li>
        <li>
            <a href="article.html">Article</a>
            <div class="uk-navbar-dropdown">
                <ul class="uk-nav uk-navbar-dropdown-nav">
                    <li><a href="article.html">Scrollspy</a></li>
                    <li><a href="article-narrow.html">Narrow</a></li>
                </ul>
            </div>
        </li>
        <li><a href="faq.html">Faq</a></li>
        <li><a href="contact.html">Contact</a></li>
        <li><a href="components.html">Components</a></li>
    </ul>

<!-- </div> Remove extra div -->

HTML主页

在主HTML页面的脚本中,考虑扩展load()回调,以便在请求失败时显示错误:

jQuery(document).ready(function(){
    jQuery("#menu").load("menu.html", function(response, status) {
        /* Optional, but consider revising this function to alert on error */
        if(status === 'error') {
            alert("Failed to load menu.html");
        }
        else {
            alert("Success!");
        }    
    });
});

如果在load()回调期间确实发生了错误,则应该进行检查以确保可以在指定(相对)位置访问menu.html
在大多数情况下,这可以直接在浏览器中完成,方法是导航到该HTML文件的URL并验证HTML响应是否符合预期。
如果您的menu.html文件位于服务器的根目录(即yourserver.com/menu.html),那么请考虑修改您的脚本,通过添加正斜杠前缀/menu.html来通过绝对路径获取menu.htm

jQuery("#menu").load("/menu.html", function(response, status) {
    ....
});

更新

或者,您可能需要考虑基于ajax()方法的这种方法:

jQuery(function() {
    jQuery.ajax({
        url: '/menu.html',
        dataType: 'html',
        success: function(data) {
            $('#menu').html(data);
        },
        error: function(xhr, error){
            alert('error. see console for details');
            console.error(error);
        }
    });
});

更新

另外,确保网站/应用的内容是从服务器而不是文件系统提供的。有很多方法可以设置服务器来实现这一点--如果你使用的是基于chrome的浏览器,那么在你的开发机器上设置本地服务器的一个简单方法就是使用chrome扩展:
https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb
安装后,您可以配置该扩展,通过本地托管服务器提供开发计算机上目录中的内容。此时,您将通过http://localhost:[SOME_PORT]/而不是file:///C:/data/访问您的网站。通过localhost访问您的网站应该可以为您解决这个问题。

5cg8jx4n

5cg8jx4n2#

在我的例子中,加载失败的原因是选择器没有返回结果,在这个例子中,$('#test')返回了一个空的结果集,所以加载没有被调用,所以要仔细检查选择器或<div id="test">中是否有打字错误,使它们不匹配。
显然,在给定MCVE的情况下,这不能解释OP的问题。但是其他在类似情况下发现这个问题的人可能希望通过额外的调试步骤。
症状:
1.在开发人员工具的网络选项卡中根本没有调用加载。
1.当在jQuery中执行console.log('%o', this)时,原型的length属性为0。这意味着我的$('#test')版本返回0个结果。一旦我意识到这一点,调试就变得简单了。困难的部分是找到那个问题(为什么),因此写了这篇文章。

相关问题