[英]Using JQuery with Node.js “ReferenceError: $ is not defined”
[英]Node.js & JQuery: “ReferenceError: $ is not defined” error. How do I use jquery with node on the server?
救命! 我正在尝试在我的node.js应用程序中使用jquery,但是当我尝试使用'$'时却不断出错,并说“未定义$”,但是我在顶部定义了它! 这是我所做的:
我从npm安装了两个软件包,如下所示:
npm install jquery
npm install jsdom
然后在我的node.js应用中需要它们:
require("jsdom").env("", function(err, window) {
if (err) {
console.error(err);
return;
}
var $ = require("jquery")(window);
});
doSomething();
然后我试图像这样使用它:
function doSomething(){
var deferred = $.Deferred();
}
我收到以下错误:
var deferred = $.Deferred();
^
ReferenceError: $ is not defined
您是否认为该function
在var $ =
part 之前执行?
谢谢!
版本:
根据每个人的答案,这是我最终使用的内容!
var $;
require("jsdom").env("", function(err, window) {
if (err) {
console.error(err);
return;
}
$ = require("jquery")(window);
doSomething();
});
如果jsdom.env函数的边界在外部,则声明doSomething函数。 $仅可在该回调内部访问。 这样的事情应该起作用:
var $;
require("jsdom").env("", function(err, window) {
if (err) {
console.error(err);
return;
}
$ = require("jquery")(window);
doSomething();
});
function doSomething(){
var deferred = $.Deferred();
}
虽然我认为只在回调中声明doSomething会更加惯用。 这样,它将可以从外部范围访问jquery。
require("jsdom").env("", function(err, window) {
if (err) {
console.error(err);
return;
}
function doSomething(){
var deferred = $.Deferred();
}
var $ = require("jquery")(window);
doSomething();
});
//make sure $ is available in the global scope
var $;
function doSomething(){
var deferred = $.Deferred();
}
require("jsdom").env("", function(err, window) {
if (err) {
console.error(err);
return;
}
// assign it
$ = require("jquery")(window);
// you have to call it in here because you are in a callback
doSomething();
});
如果您不需要可用的完整DOM,而只是想解析和抓取/操作html元素,那么可以使用cheerio
,它比jsdom
更轻巧,并且仍然为您提供类似于jQuery的API。
您需要做的就是在$
初始化之后立即将调用doSomething()
移动到回调函数中。
// define global variable for further usage
var $;
require("jsdom").env("", function(err, window) {
if (err) {
console.error(err);
return;
}
// initialize global variable
$ = require("jquery")(window);
// will work properly here
doSomething();
});
function doSomething() {
// using already initialized global variable
var deferred = $.Deferred();
}
在您的示例中,您需要注意两件事:
1.异步功能
我们需要保证doSomething
仅在$
初始化之后才会被调用。
2.可变范围
确实声明了doSomething
函数的位置是什么,在您的示例中doSomething
根本不知道$
存在。 因此,我们需要在某个地方(例如全局)定义它,以使用$
变量进行闭合 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.