jQuery的load()方法失败,但没有JS错误。

3
我是一位有用的助手,可以为您翻译文本。
我正在尝试创建一个小而简单的JS框架,用于教育目的,但现在我遇到了一个无法解决的问题。
目录结构
/
    /framework
        jquery.js
        init.js
    /content
        home.html
        style.css
    index.html

问题

显然我并没有在这里粘贴jQuery文件和样式表,但这里有index.html和init.js:

index.html

<!DOCTYPE html>
<head>
    <script src="framework/jquery-1.5.min.js"></script>
    <script src="framework/init.js"></script>
    <title>My website</title>
</head>
<body>
    <div id="content">

    </div>
</body>
</html>

init.js

$(document).ready(function(){
    if(!window.location.hash) {
        $("#content").load("../content/home.html", function() {
            alert("Load was performed.");
        });
    }
});

home.html文件包含一些示例文本,没有什么特别的。我希望jQuery将home.html的内容加载到content div中,但是当我加载页面时什么也没有发生。然而,带有“Load was performed”消息的警报被触发。
对我来说,这个任务似乎相当琐碎,所以我犯的错误可能很愚蠢,但是任何帮助都非常感激。
谢谢!
更新:
在我的服务器上使用它可以工作,但在本地主机上失败。我现在无法使用Firebug技巧,因为在本地使用它时不显示任何内容。有什么想法吗?

从浏览器的角度来看,您确定 ../content/home.html 存在吗? - Jeremy
在服务器上工作但本地主机上不工作,可能是以下原因:1)查询版本不同,如已经提到。2)不同的目录布局,也如已经提到。3)您的浏览器未能加载本地主机的ajax请求,因为它们被评估为跨站点脚本。 - Dave
4个回答

7

在jquery 1.5版本中,load函数出现了故障。您可以在http://bugs.jquery.com/ticket/8125找到此bug的详细信息。此问题已经在1.5.1版本中得到修复,但Google和Microsoft CDN尚未发布该版本。您可以在http://code.jquery.com/jquery-git.js中找到最新的jquery版本,其中包含最新的所有修复,包括load函数。

我测试并确认您的代码可在1.5.1版本中正常运行。


6
如果您正在使用Firebug,请打开NET选项卡。它允许您查看ajax响应。
很可能您应该使用:/content/home.html,而不是../content/home.html 路径是相对于页面的上下文,而不是JS文件所在的位置。

你的意思是:./content/home.html - ifaour
8
Firebug Firebug Firebug. 如果每个人都使用它,那么 StackOverflow 上关于 JavaScript 的问题将只有它现在的十分之一。+1。 - Spacedman
我非常喜欢Opera,比Firefox更喜欢,但是Firefox确实也很棒。谢谢大家! - Evert
1
喜好和厌恶,Firebug相当不错,而Chrome的调试器则是我认为最好的! - JCOC611
@Evert,它是firebug而不是火狐浏览器。Opera浏览器有firefly,你也可以使用它。只需查看HTTP请求和响应,并尝试理解发生了什么。所有的信息都在那里。 - naugtur
@naugtur:是的,我的错,那是一个打字错误...它应该是“dragon”fly,而不是firefly。 - Evert

2
执行脚本的基本位置是index.html所在的位置,因此home.html的相对路径为"content/home.html",而不是"../content/home.html"。

0

./试试看

$(document).ready(function(){
    if(!window.location.hash) {
        $("#content").load("./content/home.html", function() {
            alert("Load was performed.");
        });
    }
});

至少对我来说这个是可行的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接