Node.js执行jQuery代码报错:$.ajax is not a function
TypeError: $.ajax is not a function in Node.js when using jQuery to call a Web Service
问题原因
你碰到的这个报错很典型——Node.js环境下的jQuery和浏览器里的jQuery不一样。npm上的jquery包本质是为浏览器场景开发的,它的$.ajax方法依赖浏览器自带的XMLHttpRequest对象,但Node.js根本没有这个浏览器API;而且直接require('jquery')导入后,它也不会自动初始化出具备完整ajax功能的$对象,这就导致你调用$.ajax时会触发类型错误。
解决方案
方案1:用jsdom模拟浏览器环境让jQuery正常工作
如果一定要坚持用jQuery来实现请求,我们可以借助jsdom库模拟一个浏览器的window环境,让jQuery能在这个环境下正常初始化并启用ajax功能。
- 先安装依赖:
npm install jquery jsdom
- 修改你的代码:
const { JSDOM } = require('jsdom'); // 创建模拟的浏览器window对象 const { window } = new JSDOM(''); // 基于window对象初始化jQuery const $ = require('jquery')(window); // 请求配置(注意去掉headers里最后一个逗号,避免语法错误) const settings = { async: true, crossDomain: true, url: "https://www.kizeoforms.com/rest/v3/forms/", method: "GET", headers: { "content-type": "application/json", "Authorization": "perma_restv3_MTH_024b61f4bf72fd4c46d7633be7e21e083d8b660f", "cache-control": "no-cache" } }; // 发送请求并处理响应 $.ajax(settings) .done(function(response) { console.log(response); }) .fail(function(error) { console.error('请求失败:', error); });
方案2:使用Node.js原生HTTP工具或专用HTTP客户端(更推荐)
其实在Node.js生态里,用jQuery做HTTP请求并不是最优选择——它需要额外模拟浏览器环境,显得笨重。更推荐使用原生模块或者专为Node.js设计的HTTP库,比如axios、node-fetch,它们更轻量、更适配Node.js环境。
示例1:用axios实现(简洁易读)
- 安装axios:
npm install axios
- 代码实现:
const axios = require('axios'); // 用async/await让异步代码更直观 async function fetchFormData() { try { const response = await axios.get('https://www.kizeoforms.com/rest/v3/forms/', { headers: { "content-type": "application/json", "Authorization": "perma_restv3_MTH_024b61f4bf72fd4c46d7633be7e21e083d8b660f", "cache-control": "no-cache" } }); // 打印响应数据 console.log(response.data); } catch (error) { // 捕获并打印错误信息 console.error('请求出错:', error.response?.data || error.message); } } // 调用函数 fetchFormData();
示例2:用Node.js原生https模块(无需额外安装依赖)
如果不想安装第三方包,直接用Node.js自带的https模块也能实现:
const https = require('https'); const requestOptions = { hostname: 'www.kizeoforms.com', path: '/rest/v3/forms/', method: 'GET', headers: { "content-type": "application/json", "Authorization": "perma_restv3_MTH_024b61f4bf72fd4c46d7633be7e21e083d8b660f", "cache-control": "no-cache" } }; const req = https.request(requestOptions, (res) => { let responseData = ''; // 接收响应片段 res.on('data', (chunk) => { responseData += chunk; }); // 响应接收完成 res.on('end', () => { try { const parsedData = JSON.parse(responseData); console.log(parsedData); } catch (parseError) { console.error('解析响应失败:', parseError); } }); }); // 监听请求错误 req.on('error', (error) => { console.error('请求发生错误:', error.message); }); // 发送请求 req.end();
总结
- 如果你对jQuery有强烈依赖,方案1可以解决问题;
- 如果只是需要发送HTTP请求,方案2更符合Node.js的使用习惯,性能和维护性都更好。
内容的提问来源于stack exchange,提问作者JS1
相关产品推荐
相关产品推荐

