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

jQuery Ajax返回200状态码却触发error回调问题排查

问题原因

AJAX配置中设置了dataType: 'json',该参数会强制jQuery将服务端返回的响应内容按JSON格式解析,只要解析失败,哪怕HTTP状态码返回200 OK,也会触发error回调。
从控制台输出的SyntaxError: Unexpected end of JSON input报错可以明确判断:服务端/Comment/EditC接口返回的响应体为空、或者不是完整合法的JSON格式,jQuery解析时直接遇到输入截断,最终抛出解析错误。

修复方案

根据接口实际设计选择对应方案即可:

  • 接口无需返回业务数据,仅告知操作成功
    1. 前端侧修改:删除AJAX配置中的dataType: 'json'项,或者将其改为dataType: 'text',取消jQuery强制JSON解析的逻辑,只要HTTP状态码为2xx就会正常进入success回调。修改后的参考代码如下:
function editComment(id) {
    var content = $('#Content').val();
    var modelData = { 'Id': id, 'Content': content };
    $.ajax({
        type: 'POST',
        // 移除dataType: 'json'配置,或替换为dataType: 'text'
        url: '@Url.Action("EditC", "Comment")',
        data: JSON.stringify({ model: modelData }),
        contentType: 'application/json',
        success: function () {
            alert("YES");
        },
        error: function (xhr, textStatus, error) {
            console.log(xhr.responseText);
            console.log(xhr.statusText);
            console.log(textStatus);
            console.log(error);
            alert("Error");
        }
    });
}
  1. 服务端侧修改:保持前端dataType: 'json'配置不变,调整接口返回逻辑,确保始终返回合法JSON结构,哪怕无业务数据也要返回标准格式,比如ASP.NET MVC中可直接返回return Json(new { success = true });,保证响应体是可正常解析的JSON字符串。
  • 接口设计上需要返回JSON数据
    直接排查服务端EditC接口的逻辑:虽然返回了200状态码,但大概率是接口执行中途抛异常、响应内容被截断、JSON序列化逻辑出错,导致最终输出的不是完整合法JSON,调试接口查看实际返回的响应内容,修复序列化问题即可。

补充检查:你贴出的原始代码中$.ajax配置对象缺少闭合大括号,实际运行前请检查JS语法,避免语法错误导致代码无法执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:45:37