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

S3静态托管页面中$.post请求类型及工作原理咨询

问题解答

核心结论

$.post() 发送的是POST请求,这和你Lambda仅配置接收GET请求的设置不匹配,会导致请求无法被正确处理。

详细说明

jQuery的$.post()是$.ajax()的简化封装,默认就会将请求方法设置为POST,你代码里的这行:

$.post(backend_url, JSON.stringify({ "vote": vote }), function(result,status){ ... });

完全等价于手动指定请求方法的$.ajax()写法:

$.ajax({
  url: backend_url,
  type: "POST",
  data: JSON.stringify({ "vote": vote }),
  success: function(result,status){ ... }
});

适配现有Lambda配置的两种解决办法

办法1:修改前端代码为GET请求

把$.post()替换为$.get(),同时调整参数传递方式(GET请求参数需拼接在URL上,而非请求体):

// 使用$.get的简化写法
$.get(backend_url + "?vote=" + vote, function(result,status){
  // 保留原有的回调逻辑
});

// 或者用$.ajax明确指定GET方法
$.ajax({
  url: backend_url,
  type: "GET",
  data: { vote: vote }, // jQuery会自动将参数拼接到URL末尾
  success: function(result,status){
    // 保留原有的回调逻辑
  }
});

办法2:调整后端配置适配POST请求

从HTTP语义来说,投票提交属于数据写入操作,更适合用POST请求。你可以在API Gateway中添加POST方法的集成,指向你的Lambda函数,同时修改Lambda代码,读取POST请求体中的vote参数(也就是你当前用JSON.stringify传递的数据)。

额外提示

你代码里的<form>标签设置了method="POST",但因为点击事件最后写了return false;,阻止了表单的默认提交行为,所以实际发起请求的是$.post()的逻辑,form的method设置不会生效。

内容的提问来源于stack exchange,提问作者ERJAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:40:25