Ajax请求无法触发Success回调,控制器已返回数据求助
问题解决:Ajax请求进入Error回调而非Success的排查与修复
问题描述
调试时后端Controller可正常命中并返回数据,但前端JS的Ajax请求始终触发Error回调,无法进入Success逻辑。
核心问题分析
- 后端序列化冗余:Controller中先通过
JsonConvert.SerializeObject手动将对象序列化为字符串,再传入Json()方法返回。这会导致后端返回的是字符串格式的JSON文本,而非标准的JSON响应,前端Ajax因无法识别为合法JSON格式触发Error。 - 前端参数拼写错误: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
相关产品推荐
相关产品推荐

