JQuery错误: Uncaught TypeError: Object #<HTMLDocument>没有'ready'方法。

35

我的网站在javascript控制台中出现了这个标题的错误。谷歌似乎说是因为jquery没有加载,但它明显可见于头部。

<script type="text/javascript">
  $(document).ready(function(){
    $.ajax({
      type: "GET",
      url: "https://www.mjfreeway.com/naturalremedies/mml-connect/45.xml",
      dataType: "xml",
      success: function(xml) {
        $(xml).find("products").each(function() {
          $(this).find("product").each(function() {
            $("#output").append($(this).find("title").text() + "<br />");
          });
        });
      }
    });
  });
</script>

抱歉,这个网站与医用大麻有关,对于某些人来说可能不适宜。很抱歉头脑混乱,它正在开发模式中。 http://www.kindreviews.com/1/mmc/ 谢谢, zeem

你可能应该发布一些代码... - Patrick
@Patrick:我同意,问题是,哪一段代码。 这是由多个组件组合而成的大型程序。 :-) - T.J. Crowder
您可以在上面链接的网站(这个:http://www.kindreviews.com/1/mmc/)中查看代码。 - brandizzi
@zeemy23:这种问题的解决方法是:不断地减少代码,直到问题消失,然后查看最后一次删除的内容,逐步添加回来等。好消息是,这个问题是可靠的。这个错误的经典原因是在包含jQuery之前使用jQuery脚本。我的快速检查没有立即显示出你是否正在这样做,但是那个页面有很多东西,所以... - T.J. Crowder
代码出错的位置在第315行。 - zeemy23
1
@brandizzi:是的,但StackOverflow旨在独立存在并持久存在;它不仅仅是为了解决@zeemy23的问题,而且还为将来遇到相同问题的人提供参考。外部链接可能会被移动、删除、修改...此外,理想情况下,人们不应该只能通过跟随盲目的链接来帮助别人。对于这种类型的问题来说,这很棘手。 - T.J. Crowder
3个回答

53

显然,您正在同时使用jQuery和Mootools,并且它们都使用$作为核心函数的别名。可能造成此错误的$函数是Mootools函数。我建议您尝试使用jQuery而不是$编写您的jQuery代码,这样您可以确认我的观点是否正确。

祝你好运!


感谢您的帮助。现在移除mootools后出现了这个错误:对象[object DOMWindow]的属性'$'不是一个函数。 - zeemy23
问题已经通过tbthorpe的回答得到解决,但仍然存在问题,请查看他的评论。 - zeemy23
2
@zeemy23:你不需要删除MooTools,只需要让你的代码使用正确的jQuery符号。如果你使用Chrome浏览器,请将其置于“所有异常中断”模式下(http://code.google.com/chrome/devtools/docs/scripts-breakpoints.html#js_exceptions),跳过第一个异常(CSS文件中的404错误),然后你会看到`$.noConflict();`,接着是`$(document).ready(...`。在第二行中,`$`不再引用jQuery,因为这就是`noConflict`所做的,将符号返回到其先前的含义(在这种情况下是MooTools)。请改用`jQuery(document).ready(...`。 - T.J. Crowder
2
你应该在所有的jQuery代码中将$替换为jQuery,而不仅仅是在原始错误行中。我注意到脚本在jQuery(document)行下面有一个$.ajax。它应该改为jQuery.ajax(以及jQuery(xml)jQuery(this)等)。希望对你有所帮助。 - brandizzi

8

是的,我相信这正是问题所在。jQuery和mooTools争夺$符号的使用权。

你在使用中已经走在了正确的轨道上

try{
   jQuery.noConflict();
 } catch(e){};

但是在使用之后,为了使用jQuery的功能,你必须调用jQuery(...)而不是$(...)。例如:

// Use jQuery via jQuery(...)
 jQuery(document).ready(function(){
   jQuery("div").hide();
 });

这里有一个链接,指向jQuery文档中关于这个的内容:http://docs.jquery.com/Using_jQuery_with_Other_Libraries


谢谢!你的建议起作用了,但现在我遇到了一个“无法调用未定义的方法'ajax'”的问题。这是因为$符号也在前面吗? - zeemy23
是的,在使用jQuery功能时,您不需要$。实际上,如果您这样做,它会出错。只需将“$”替换为“jQuery”,我相信它应该可以为您解决问题。 - tbthorpe
你也可以使用以下代码:jQuery(document).ready(function($){ /* 在这里使用 $ 的代码 */ }); 这将仅为该本地函数范围定义 $。 - DWils

0

当我忘记添加头行时,我遇到了相同的错误:

<script type="text/javascript" src="/javascript/jquery-ui-1.8.14.custom.min.js">   
</script>

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