为什么在Node.js上使用jQuery时$ .ajax未定义?

时间:2015-03-22 05:31:30

标签: javascript jquery node.js

我有一个应该在客户端上运行的模块,但是我在Node.js上测试它,所以我想让$.ajax工作。

我在项目中安装了jQuery

$ npm install jQuery

然后我这样做:

var $ = require("jquery");
console.log($.ajax); // undefined

$.ajax未定义。

这对我来说有点道理,因为ajax是静态的,我认为require("jquery")的结果相当于浏览器中的$.fn

如何在节点上使用$.ajax

1 个答案:

答案 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",