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

AJAX发送GET请求至Express未被接收问题求助(附前后端代码)

解决AJAX GET请求无法被Express接收的问题

看起来你遇到的核心问题是GET请求不支持通过req.body获取参数,这是HTTP规范决定的——GET请求的参数应该放在URL的查询字符串或者路径参数里,而不是请求体中。结合你给出的代码,我帮你梳理下问题和解决方案:

问题分析

你的后端Express路由用了GET方法,但却试图读取req.body.approve,这肯定拿不到值,甚至可能导致请求处理逻辑异常,最终让你觉得“请求没被接收”。另外,如果你没配置请求体解析中间件,就算是POST请求也会拿不到req.body。

解决方案

这里给你两种可行的修改方案,根据你的需求选择:

方案一:改用POST请求(推荐,因为涉及状态修改)

既然你要更新请假的审批状态,用POST请求更符合REST规范。修改如下:

后端代码修改
// 把router.get改成router.post
router.post('/principal/leave/approval/:id', function(req, res) {
  console.log('requested');
  // 更简洁的方式判断审批状态
  const approval = Boolean(req.body.approve);
  
  leaveDB.update({ _id: req.params.id }, { approved: approval }, function(err) {
    if (err) {
      console.log(err);
      // 记得返回错误状态码,方便前端处理
      return res.status(500).send('更新失败');
    }
    res.send('success');
  });
});

同时,确保你的Express应用已经配置了解析请求体的中间件(这一步很重要!):

const express = require('express');
const app = express();

// 解析JSON格式的请求体
app.use(express.json());
// 解析表单格式的请求体(如果前端用form-data的话)
app.use(express.urlencoded({ extended: true }));
前端AJAX示例(假设用jQuery)
// 绑定Approve按钮点击事件
$('.btn<%=details._id%>#Approve').click(function() {
  const leaveId = '<%=details._id%>';
  $.ajax({
    url: `/principal/leave/approval/${leaveId}`,
    type: 'POST',
    data: JSON.stringify({ approve: true }), // 传递审批状态
    contentType: 'application/json',
    success: function(response) {
      console.log('审批成功:', response);
      // 这里可以添加页面刷新或提示逻辑
    },
    error: function(xhr) {
      console.log('请求失败:', xhr.responseText);
    }
  });
});

// Disapprove按钮同理,只需要把approve改成false
$('.btn<%=details._id%>#Disapprove').click(function() {
  const leaveId = '<%=details._id%>';
  $.ajax({
    url: `/principal/leave/approval/${leaveId}`,
    type: 'POST',
    data: JSON.stringify({ approve: false }),
    contentType: 'application/json',
    success: function(response) {
      console.log('驳回成功:', response);
    },
    error: function(xhr) {
      console.log('请求失败:', xhr.responseText);
    }
  });
});

方案二:继续用GET请求,把参数放在URL查询字符串里

如果一定要用GET,那需要把approve参数放在URL的查询部分,后端通过req.query获取:

后端代码修改
router.get('/principal/leave/approval/:id', function(req, res) {
  console.log('requested');
  // GET参数是字符串类型,所以要转成布尔值
  const approval = req.query.approve === 'true';
  
  leaveDB.update({ _id: req.params.id }, { approved: approval }, function(err) {
    if (err) {
      console.log(err);
      return res.status(500).send('更新失败');
    }
    res.send('success');
  });
});
前端AJAX示例
$('.btn<%=details._id%>#Approve').click(function() {
  const leaveId = '<%=details._id%>';
  $.ajax({
    url: `/principal/leave/approval/${leaveId}?approve=true`,
    type: 'GET',
    success: function(response) {
      console.log('审批成功:', response);
    },
    error: function(xhr) {
      console.log('请求失败:', xhr.responseText);
    }
  });
});

$('.btn<%=details._id%>#Disapprove').click(function() {
  const leaveId = '<%=details._id%>';
  $.ajax({
    url: `/principal/leave/approval/${leaveId}?approve=false`,
    type: 'GET',
    success: function(response) {
      console.log('驳回成功:', response);
    },
    error: function(xhr) {
      console.log('请求失败:', xhr.responseText);
    }
  });
});

额外检查点

  • 确认前端AJAX的URL路径和后端路由完全匹配,有没有拼写错误;
  • 如果是跨域请求,需要在Express中配置CORS中间件;
  • 打开浏览器的开发者工具(F12),查看Network面板,确认请求是否真的发送出去,以及请求的状态码和响应内容。

内容的提问来源于stack exchange,提问作者Dilan Sachintha Nayanajith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:15:55