Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加载requirejs和jquery时出错_Javascript_Jquery_Requirejs - Fatal编程技术网

Javascript 加载requirejs和jquery时出错

Javascript 加载requirejs和jquery时出错,javascript,jquery,requirejs,Javascript,Jquery,Requirejs,我正在用requirejs和jquery为AMD做一个简单的演示。 以下是我的文件夹结构: ├── index.html └── js ├── lib │   ├── jquery.js │   └── require.js └── main.js 在我的index.html文件中,我有以下内容: <head> <script data-main="js/main" src="js/lib/require.js"></s

我正在用requirejs和jquery为AMD做一个简单的演示。 以下是我的文件夹结构:

├── index.html
└── js
    ├── lib
    │   ├── jquery.js
    │   └── require.js
    └── main.js
在我的index.html文件中,我有以下内容:

  <head>
    <script data-main="js/main" src="js/lib/require.js"></script>
  </head>

  <body>
    <div id="hello">    </div>

  </body>
但是当我这样做时,我得到一个错误:
uncaughttypeerror:undefined不是main.js第3行中的函数


怎么了?我不明白?

我试过你的例子,在main.js的第一行中没有“$”,它工作正常

修复了main.js的问题:

define(['lib/jquery'], function () {
     $("#hello").html("Wow this works!");
});

这就是你想要的。
datamain
属性只指向它的相对请求的根。因此,您需要直接或通过脚本标记或内联脚本块中的
require()
调用在main中加载

我的理解是,这是因为jquery是如何定义自己的。它正在使用命名的定义调用:

define( "jquery", [], function () { return jQuery; } );
所以现在,如果您需要
'lib/jquery'
,它将无法工作。您必须准确地要求
'jquery'
才能让它工作

编辑:

如果要将jquery放入
lib/
文件夹中,并将您的基本url作为
lib/
lib/./
)的父文件夹,可以使用如下垫片:

define(['lib/jquery'], function ($) {

  $("#hello").html("Wow this works!");

});
requirejs.config({
  baseUrl: 'js',
  shim: {
    'lib/backbone': {
      deps: ['lib/underscore', 'lib/jquery'],
      exports: 'Backbone'
    },
    'lib/underscore': {
      exports: '_'
    },
    'lib/jquery': {
      exports: '$'
    }
  }
});

requirejs(['lib/jquery'], function($) {
  // use $
});

您是否定义了调用Sjury库?在html上只需调用require.js脚本执行时,
#hello
是否可能不存在?我也尝试过:
require(['lib/jquery'],function($){$(function(){$(“#hello”).text(“哇,这很有效!”;})这也给出了同样的错误。你们看了吗?根据我对文档的阅读,define首先获取一个数组,然后将该数组中的值传递给一个匿名函数。因此,我将$传递给该函数,我的实现有什么问题吗?我不太确定,但尝试
console.log
匿名函数的参数-它将返回
未定义的
(在我播放代码时就是这样做的)。因此jQuery的
$
被未定义的变量覆盖,因此没有可用的jQuery函数。这只是创建了对全局对象
$
的隐式依赖,这在某种程度上违背了将jQuery作为模块加载的初衷。-1。这会导致
uncaughtreferenceerror:define未定义
from
main.js
。另外:
datamain
所做的不仅仅是“指向它的相对请求的根”。在OP的示例中,模块id为
main
。在[()上,它清楚地说明;//这将不起作用定义(['lib/jquery'],函数($){…});如果您不配置requirejs,它将不起作用。但是正如您所看到的,我在需要它之前已经配置了它。我的意思是您不应该使用'lib/jquery'
requirejs.config({
  baseUrl: 'js',
  shim: {
    'lib/backbone': {
      deps: ['lib/underscore', 'lib/jquery'],
      exports: 'Backbone'
    },
    'lib/underscore': {
      exports: '_'
    },
    'lib/jquery': {
      exports: '$'
    }
  }
});

requirejs(['lib/jquery'], function($) {
  // use $
});