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

无法通过AJAX请求从Java/Spring REST端点获取JSON的问题排查

问题原因及解决方案

这问题我之前踩过坑!核心原因是你混用了JSON和JSONP两种响应格式,导致jQuery的JSONP解析逻辑找不到预期的回调函数——哪怕HTTP状态码是200,还是会触发错误回调。

为什么会报错?

你前端设置了dataType: "jsonp",这相当于告诉jQuery:我要按JSONP规则处理响应。而JSONP的本质是靠动态创建<script>标签绕过跨域限制,它要求后端返回的不是纯JSON字符串,而是一个回调函数的调用语句,格式大概是这样:

jQuery1113010493236335514322_1517318340103({"msg":"success"})

但你的后端返回的是纯JSON {"msg":"success"},完全没有包裹在jQuery自动生成的回调函数里。所以jQuery加载这个响应后,找不到要执行的回调函数,就抛出了xxx was not called的错误。

两种解决方案

方案一:改用普通JSON + 开启CORS(推荐)

JSONP是比较老旧的跨域方案,局限性大(只支持GET请求、安全性低),现在更推荐用CORS解决跨域问题,然后用普通JSON格式交互。

  1. 后端开启CORS:
    在Spring Boot中,你可以直接在Controller或方法上添加@CrossOrigin注解:

    @RestController
    @CrossOrigin // 全局允许跨域,也可以只加在单个方法上
    public class YourController {
        @RequestMapping(value = "/test", method = RequestMethod.GET, produces="application/json")
        public String getReitByDateRangeAdDoGeographic(){
            return "{\"msg\":\"success\"}";
        }
    }
    
  2. 前端修改dataType:
    把dataType: "jsonp"改成dataType: "json"(甚至可以去掉,jQuery会自动识别响应格式):

    $.ajax({
        dataType: "json",
        url: URL,
        success: function(data) {
            console.log("SUCCESS");
            console.log(data.msg); // 可以直接访问返回的字段
        },
        error: function (a,b, result) {
            console.log("ERROR");
            console.log(a);
            console.log(b);
            console.log(result);
        }
    });
    

方案二:后端适配JSONP格式(不推荐,仅兼容老旧场景)

如果一定要用JSONP,需要后端接收前端传过来的callback参数,把JSON数据包裹在回调函数里返回:

@RequestMapping(value = "/test", method = RequestMethod.GET)
public String getReitByDateRangeAdDoGeographic(@RequestParam(value = "callback", required = false) String callback){
    String json = "{\"msg\":\"success\"}";
    // 如果有callback参数,就返回JSONP格式;否则返回普通JSON
    if(callback != null){
        return callback + "(" + json + ")";
    }
    return json;
}

前端保持dataType: "jsonp"即可,jQuery会自动在请求URL里加上callback=xxx参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:29:17