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

Ajax请求无法触发Success回调,控制器已返回数据求助

问题解决:Ajax请求进入Error回调而非Success的排查与修复

问题描述

调试时后端Controller可正常命中并返回数据,但前端JS的Ajax请求始终触发Error回调,无法进入Success逻辑。

核心问题分析

  1. 后端序列化冗余:Controller中先通过JsonConvert.SerializeObject手动将对象序列化为字符串,再传入Json()方法返回。这会导致后端返回的是字符串格式的JSON文本,而非标准的JSON响应,前端Ajax因无法识别为合法JSON格式触发Error。
  2. 前端参数拼写错误:Ajax配置中datatype应为驼峰命名的dataType,虽非核心报错原因,但会影响jQuery自动解析响应的逻辑。

修复步骤

后端Controller代码修正

移除手动序列化步骤,直接将对象传入Json()方法,ASP.NET MVC会自动完成序列化并返回标准JSON响应:

public JsonResult NPDAutoSuggest()
{
    NPD npdObject = new NPD();
    FGMOQMapping fGMOQMapping = _purchaseOrderRepository.GetFGMOQMappingAutoSuggest(Convert.ToInt64(Session["UserId"]));
    npdObject.FGList = fGMOQMapping.FGList;
    npdObject.SFGList = fGMOQMapping.SFGList;
    npdObject.PlantList = _plantRepository.GetPlantList(0, "", "", Convert.ToInt64(Session["UserId"]));
    
    // 直接传入实体对象,由框架自动处理JSON序列化
    return Json(npdObject, JsonRequestBehavior.AllowGet);
}

前端Ajax代码修正

修正参数拼写并移除多余的手动JSON解析:

$.ajax({
    url: ROOT + "PurchaseOrder/NPDAutoSuggest",
    type: 'POST',
    dataType: 'JSON', // 修正为驼峰命名的dataType
    success: function (result) {
        AutoData = result; // jQuery已自动将响应解析为JSON对象,无需手动parse
    },
    error: function (xhr, status, error) {
        console.log("错误状态:", status);
        console.log("错误详情:", error);
        alert("请求失败");
    }
});

额外排查建议

  • 打开浏览器控制台的Network面板,检查响应头的Content-Type是否为application/json,修正后后端会自动设置该正确类型。
  • 确认Session中的UserId存在且为有效数值,避免因类型转换失败导致后端抛出未捕获异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:33:24