我有一个应该在客户端上运行的模块,但是我在Node.js上测试它,所以我想让$.ajax
工作。
我在项目中安装了jQuery
:
$ npm install jQuery
然后我这样做:
var $ = require("jquery");
console.log($.ajax); // undefined
$.ajax
未定义。
这对我来说有点道理,因为ajax
是静态的,我认为require("jquery")
的结果相当于浏览器中的$.fn
。
如何在节点上使用$.ajax
?
答案 0 :(得分:1)
您可以从以下文档中找到原因:https://www.npmjs.com/package/jquery#node
要使jQuery在Node中工作,需要一个带有文档的窗口。由于Node本身不存在这样的窗口,因此可以通过jsdom之类的工具来模拟。这对于进行测试很有用。
但是文档的设置代码已过时。
最新的设置代码为:
var jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = new JSDOM("").window;
global.document = document;
var $ = require("jquery")(window);
// test
console.log("$.get:", typeof $.get);
console.log("$.ajax:", typeof $.ajax);
$.get("http://localhost:3000", data => {
console.log(data);
});
module.exports = $;
运行此代码,得到:
$.get: function
$.ajax: function
normal
normal
文本是我的本地http服务器的响应。
依赖版本:
"jsdom": "^15.2.1",
"jquery": "^3.4.1",