我的Web应用程序中有各种JS库,这些库在我的主JS文件(main.js)之前加载。这些库之一是jshashtable,但是当我尝试在main.js中创建新的Hashtable对象时,Google Chrome和Firefox抛出ReferenceError,抱怨该变量不存在。

这是应用程序的:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
 <script type="text/javascript" src="/static/jquery-1.4.4.min.js"></script>
 <script type="text/javacsript" src="/static/jshashtable-2.1.js"></script>
 <script type="text/javascript" src="/static/main.js"></script>


这是main.js中的问题行:

posts = new Hashtable();


该行位于一个名为init的函数内,该函数在页面加载完成时调用(使用jquery $(document).ready()函数)。

为什么Hashtable不是全局的? Google地图和jquery对象可以正常工作。 jshashtable的源可以在Google code上看到。

最佳答案

更新的答案:问题是您在script标记中有错字:

<script type="text/javacsript" src="/static/jshashtable-2.1.js"></script>
<!--                   ^^---- here (the letters are transposed)       -->


我不明白为什么您会遇到问题,并决定实际上复制并粘贴您的脚本标签并在我的机器上精确地复制结构。事情停止了,我的世界逆时针倾斜了3°,直到我终于凝视它们足够长的时间才能看到它。

如果jshashtable代码确实位于/static/jshashtable-2.1.js且您的服务器正确提供了该代码(请在开发工具中仔细检查Chrome的“资源”标签),则看不到任何原因。您的脚本顺序正确,并且jshashtable的文档使用全局Hashtable进行显示(并且您给出的代码链接清楚地显示了该脚本创建一个)。



编辑:我刚刚在自己的服务器上复制了相同的结构(相同的脚本,相同的顺序,使用jQuery(document).ready(function() { ... });),并且没有出现此问题。我可以创建一个Hashtable并使用其功能。

我的HTML:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Test Page</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type='text/javascript' src='jquery-1.4.4.js'></script>
<script type='text/javascript' src='jshashtable-2.1.js'></script>
<script type='text/javascript' src='main.js'></script>
</head>
<body>
</body>
</html>


我的main.js

jQuery(document).ready(function() {
    try {
        var ht = new Hashtable();
        display("typeof ht = " + typeof ht);
        display("ht.size() = " + ht.size());
    }
    catch (e) {
        display("Exception: " + e);
    }

    function display(msg)
    {
        $("<p>").html(msg).appendTo(document.body);
    }
});


唯一的区别是我没有使用/static前缀,而且我绝对可以确定这没有区别。

10-02 18:52