【问题标题】:JQuery Undefined in IE8IE8中未定义的JQuery
【发布时间】:2012-11-16 17:47:00
【问题描述】:

在我的页面底部,我是一个不执行异步调用的 jquery 函数。它在 Chrome、FireFox 中运行良好。但是在 IE8 中它说 jQuery 是未定义的。这可能是什么原因造成的?

<script src="/scripts/jquery" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        jQuery.ajax( "dev/js/templates", {
                async : false,
                success: function (data) {
                    $("#tpl_scripts").html(data);
                }

    })

    </script>

请注意,脚本是从 PHP 返回的,标题为

<?php 
$script = file_get_contents('/libs/scripts/jquery.1.8.2');
if (extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler")) {
            ini_set("zlib.output_compression", 1);
    }

    header('Content-type: text/javascript');

echo $script;
?>

【问题讨论】:

  • 当您改用$ 变量或window.jQuery 时会发生什么? AFAIK,这些都映射到同一个东西。
  • 您是否仔细检查了 jQuery 的路径?您是否查看过 Firebug 或其他开发工具中的错误?
  • @Bruno:如果 jQuery 未定义,那会有什么帮助?
  • 你确定它加载正确吗?您可以在开发者工具中查看网络选项卡; /scripts/jquery 的路径充其量看起来很狡猾。
  • file_get_contents('/libs/scripts/jquery.1.8.2.js')

标签: javascript jquery internet-explorer


【解决方案1】:

这将是一个很长的镜头,但从你的 cmets 来看,我知道发生了什么。

您说 PHP 将多个 JavaScript 文件连接在一起并一次性提供它;这通常是个好主意(尽管我会进行静态编译并且仍然只使用 Web 服务器)。

Internet Explorer 因在对象中放置逗号而臭名昭著,例如

var a = {
    x: 123,
    y: 456,
}

看到y 属性声明后的多余逗号了吗?大多数浏览器并不关心这些东西,大多数 PHP 开发人员总是为了方便而使用它。

另一方面,Internet Explorer 对此进行了轰炸,并停止运行后面的其余代码。在您的情况下,如果它前面有您自己的代码,则可能包括 jQuery(因为 John Resig 永远不会犯“n00b”错误:))

【讨论】:

  • 好的,我知道我在某些地方留下了多余的逗号。有什么东西可以清理我的代码吗?还是我必须经历所有事情?
  • @DevinDixon 也许 jslint 可以帮助你?
  • 就是这样,多余的逗号,jslint 太过分了。我用它来查找逗号:closure-compiler.appspot.com/home
【解决方案2】:

尝试将 .php 添加到脚本标签的 src 属性中

<script src="/scripts/jquery.php" type="text/javascript"></script>

【讨论】:

  • 其实应该是 /scripts/jquery.js 因为它是一个 JavaScript 文件。或者似乎是。
  • 但实际提供的文件是 PHP 文件,即使内容被标记为 JS。很奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
相关资源
最近更新 更多