jQuery没有定义(在模板环境中)

我试图显示一个使用jQuery的页面。 页面中实现的AJAXfunction不起作用。

我正在使用FF进行调试。 当我查看控制台面板时,我看到以下错误:’jQuery未定义’。 啊,我觉得这很简单 – 也许jQuery文件没有被正确包含,或者找不到等等所以我看一下HTML并点击节点 – 瞧, jQuery脚本已经正确地包含在这页纸。

虽然引用jQuery的页面中没有其他js库使用’$’(如原型),但我在jQuery逻辑中调用了noConflict()方法,以防我在以后使用冲突库。

[编辑]

我认为这个问题与我在模板环境中使用jQuery的文件有关(准确地说是Symfony 1.4)。 对于那些不熟悉Symfony模板系统的人来说,视图模型本质上是一个“布局”文件(模板),然后用其他信息来装饰(装饰模式)(让我们称之为’页面内容’ )。

最后一页看起来大致如下:

        

我正在将jQuery加载到模板中(即Symfony术语中的’layout’)。

这样做的原因是JQ库是高速缓存的客户端,并且可用于需要它的页面。 动态页面(其内容进入布局的“页面内容”部分)将具有自己的jQuery逻辑。 这(使用下面Mark Schultheiss的答案中提供的“包装函数”的想法)如下所示:

  /**/  

** [Edit2] **更正了语法错误。 现在我回来让jQuery没有定义错误。 🙁

它在加载脚本/ DOM之前运行。 把jQuery.noconflict(); 在jquery包装器中

 jQuery(function() { jQuery.noConflict(); }); 

如果你认为你可能需要保护自己:

  (function($) { $.noConflict(); })(jQuery); 

也有效

编辑:修正了一些语法错误

这归结为99%的所有情况下都没有加载JQuery。

  • 使用Firebug的“网络”选项卡检查您的JQuery文件是否实际被加载。

  • 另外,可能是你引用了JQuery两次,我认为这可能会导致JQuery消失。

如果这没有帮助,我建议你将 includes转储到你的问题中,就像在你的浏览器中一样。

对我有用的是使用绝对引用而不是相对于脚本,尽管对于不进行内部Web项目的人来说这是一个安全噩梦。

jQuery可能是异步加载的。 例如,如果您正在使用如下所示的Google Ajax API,那么您必须在传递给google.setOnLoadCallback()的回调中包装任何依赖于jQuery的代码:

   

或者,您可以通过在脚本标记中直接引用jQuery来避免异步加载:

  

你应该在包含jQuery之后立即调用jQuery.noConflict():

    

也许链接到外部jQuery是错误的? 似乎代码应该工作。 尝试摆脱CDATA阻止 – 你可能不需要它。

围绕以下函数包装你的jQuery代码(如果你真的需要它,调用jQuery.noConflict()

 $(function() { jQuery.noConflict(); ... }); 

并确保将其添加到页面的部分。