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

使用Ajax向REST Controller传数据时后端未接收数据的问题

解决Ajax GET请求后端接收不到数据的问题

看起来你遇到了前端Ajax发送GET请求,但Java后端拿不到对应参数的问题,我来帮你排查下可能的原因和解决办法:

首先先把你的代码贴出来方便分析:

前端Ajax代码

checkOut:function(){ 
    var self = this; 
    var str = "junk string"; 
    $.ajax({ 
        url: "http://localhost:9000/checkoutcart/data/", 
        type : "get", 
        data : { ajaxid: 4, UserID: str }, 
    }).then(function (data) { 
        self.setState({movies: data}); 
    }); 
    cartItems.length = 0; 
    this.purchase = "Your shopping was successful"; 
},

可能的问题及解决步骤

1. 先确认前端请求是否真的发送了正确参数

打开浏览器的开发者工具(按F12),切换到Network标签,找到这个GET请求,查看请求URL是否包含预期的参数,应该是类似这样:
http://localhost:9000/checkoutcart/data/?ajaxid=4&UserID=junk%20string
如果URL里没有这些query参数,说明前端的data参数没被正确解析,这种情况可以尝试手动把参数拼到URL后面测试,或者检查jQuery版本是否存在兼容问题。

另外提一句:你代码里的cartItems.length = 0和this.purchase = ...是在Ajax请求外部执行的,由于Ajax是异步操作,这两行会在请求发送前就执行,如果这部分逻辑需要依赖请求成功的结果,记得移到then回调函数内部。

2. 检查Java控制器的参数绑定是否正确

结合你提到的Java控制器代码,这里有几个关键的注意点:

  • 确保@GetMapping注解的路径和前端的url完全一致(包括末尾的斜杠)
  • 必须用@RequestParam注解绑定GET请求的query参数,且参数名要和前端传入的完全匹配(前端是ajaxid和UserID,大小写都要对应)

正确的控制器示例:

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CheckoutController {

    @GetMapping("/checkoutcart/data/") // 路径与前端完全对应
    public ResponseEntity<?> handleCheckout(
            @RequestParam("ajaxid") Integer ajaxId, // 参数名匹配前端的ajaxid
            @RequestParam("UserID") String userId) { // 参数名匹配前端的UserID
        // 打印参数验证是否接收成功
        System.out.println("ajaxid: " + ajaxId);
        System.out.println("UserID: " + userId);
        
        // 执行业务逻辑后返回数据
        return ResponseEntity.ok(...);
    }
}

3. 排查其他潜在问题

  • 跨域问题:如果前端页面的域名/端口和后端不一致,浏览器会拦截请求,开发者工具里会出现跨域报错,这种情况需要在后端配置CORS(比如Spring中添加@CrossOrigin注解)。即使都是localhost,不同端口也会触发跨域限制。
  • 后端日志排查:查看后端控制台日志,确认是否接收到该请求,有没有参数绑定的错误信息(比如类型不匹配,前端传数字4但后端用String接收没问题,但如果后端用int类型却收到非数字内容就会报错)。

按照上面的步骤排查,应该就能找到问题所在了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:32:51