You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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功能。

  1. 先安装依赖:
npm install jquery jsdom
  1. 修改你的代码:
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实现(简洁易读)
  1. 安装axios:
npm install axios
  1. 代码实现:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:14:02