![](/img/trans.png)
[英]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.