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

Groovy返回JSON至Ajax报错排查及修复方法(附环境信息)

问题分析与修复方案

嘿,我来帮你捋清楚问题所在:你遇到的err回调触发,核心原因是Groovy返回的JSON格式不符合标准规范,导致jQuery的dataType: 'json'解析失败。

1. 当前Groovy返回的JSON格式问题

你写的"{rs: 2}"不是合法的JSON——JSON要求所有键名必须用双引号包裹,而这里的rs没有双引号,属于无效格式。jQuery会严格校验JSON格式,一旦不符合就会判定请求失败,所以控制台输出err。

2. 修复方案

方案一:手动修正JSON字符串(简单场景)

直接给键名加上双引号,改成标准JSON格式:

response.contentType = 'application/json';
out << '{"rs": 2}'; // 注意键名rs必须用双引号包裹

方案二:用Groovy自带的JsonBuilder生成JSON(推荐,复杂场景更可靠)

手动拼接JSON很容易出错(比如嵌套结构、特殊字符转义),Groovy提供了JsonBuilder工具类可以自动生成标准JSON,避免手动编写的疏漏:

import groovy.json.JsonBuilder

// 设置响应类型为JSON
response.contentType = 'application/json'

// 构建JSON对象,无需手动加引号
def jsonBuilder = new JsonBuilder()
jsonBuilder {
    rs 2
}

// 输出标准JSON字符串
out << jsonBuilder.toString()

3. 额外的Ajax端检查

除了后端的JSON格式,还要确保Ajax发送的数据格式和contentType匹配:

  • 如果你传递的是JavaScript对象,需要用JSON.stringify()转成JSON字符串,否则jQuery会默认用application/x-www-form-urlencoded格式发送,和你设置的contentType: "application/json"不匹配,可能导致后端解析异常:
// 示例:假设你的请求数据是一个JS对象
let postData = { id: 1, content: "test" };

$.ajax({
    type: "post",
    contentType: "application/json; charset=UTF-8",
    url: "edit.groovy",
    data: JSON.stringify(postData), // 转成JSON字符串后发送
    dataType: 'json',
    success : function(data) {
        console.log('ok', data);
    },
    error: function(xhr, status, error) {
        // 打印详细错误信息,方便排查
        console.log('错误状态:', status);
        console.log('错误信息:', error);
        console.log('后端返回内容:', xhr.responseText);
    }
});

4. 排查小技巧

在error回调里打印xhr.responseText,可以直接看到后端实际返回的内容,能快速定位是JSON格式问题还是其他后端逻辑问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:30:33