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

标签 javascript jquery node.js

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

我在项目上安装了jQuery:

$ npm install jQuery

然后我这样做:

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

$.ajax 未定义。

这对我来说有点意义,因为 ajax 是静态的,我认为 require("jquery") 的结果等同于 $ .fn 在浏览器中。

如何在 Node 上使用 $.ajax

最佳答案

你可以从这个文档中找到原因:https://www.npmjs.com/package/jquery#node

For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as jsdom. This can be useful for testing purposes.

但是文档的设置代码已经过时了。

最新的设置代码是:

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

普通 文本是来 self 本地 http 服务器的响应。

依赖版本:

"jsdom": "^15.2.1",
"jquery": "^3.4.1",

关于javascript - 为什么在 Node.js 上使用 jQuery 时 $.ajax 未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29191339/

相关文章:

node.js - Express Cassandra 从目录自动加载模型 - models.instance.Person 不是构造函数

javascript - 等待响应再返回

Javascript 从没有全局作用域的元素事件中调用函数

javascript - 使用 for 循环组合两个数组

javascript - 如何浅渲染除子 react 组件之外的所有内容或指定深度

javascript - JQuery 无法从单选按钮读取值

javascript - 在白色背景 div 下推送页脚

javascript - 在另一个函数中触发点击函数

javascript - 使用 JQuery 删除监听器?应该还是不应该?

node.js - 上传的头像保存在哪里