2

当我只是复制该行时:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>

到我的 JSP 页面,我在通过 firebug 调试时看到以下错误

TypeError:readyList.promise 不是函数

此外,所有的 jquery 代码都没有被执行。

有人可以建议吗?

有趣的是,当我使用 jquery-1.6.4 时,我遇到了错误

TypeError: jQuery(...)[original] 不是函数

4

1 回答 1

1

我在一个较早的(非 jQuery)脚本定义的页面上遇到了这个错误Object.prototype.extend,所以当jQuery试图调用jQuery.extend(在 的定义内jQuery.Deferred,它是 的构造函数readyList)时,它被非 jQuery 定义覆盖。这导致readyList不继承该promise方法,从而导致错误。

例如,以下 HTML 在错误控制台中重新创建“TypeError: readyList.promise is not a function”错误:

<!doctype html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="UTF-8">
  </head>
  <body>
  <script type="text/javascript">
    Object.prototype.extend = function(){
      console.log('Object.prototype.extend', this, arguments);
      for (var i = 0; i < arguments.length; i ++) {
        var object = arguments[ i ];
        for ( var property in object ) {
          try {
            if (  !this[ property ] &&
                  object.hasOwnProperty( property ) )
              this[ property ] = object[ property ];
          } catch( e ){}
        }
      }
      return this;
    };
  </script>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
  </body>
</html>

(覆盖很奇怪:jQuery.extend被定义,然后调用一个对象文字来扩展 jQuery 本身。在此期间,原始jQuery.extend找到对象文字的extend属性(指Object.prototype.extend),并愉快地使用它来设置jQueryextend属性,覆盖自己)。

您的错误可能是由同一件事引起的。

要修复它,请在包含 jQuery 之前尝试包含一个小脚本,以删除任何现有的定义Object.prototype.extend并查看是否可以解决问题:

<script type="text/javascript">
  delete Object.prototype.extend;
</script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
于 2014-09-22T15:01:43.677 回答