Asp.net MVC - Jquery $ .ajax错误回调没有返回responseJSON

Jun*_*lva 8 asp.net ajax jquery jsonresult

我有下面的代码,在开发机器上工作正常,但从远程浏览器调用时却没有...

$.ajax({
  type: 'POST',
  url: '@Url.Action("Action", "Controller")',
  data: { id: id },
  dataType: 'json',
  async: true,
  success: function (data) {
  },
  error: function (jqXHR, status, err) {
    var result = jqXHR.responseJSON;
  }
});
Run Code Online (Sandbox Code Playgroud)

jqXHR.responseJSON对象在从localhost调用时工作,但是当从远程计算机调用时没有,它返回为未定义...有人可以帮助我吗?提前致谢!

在此输入图像描述

neb*_*ous 12

我遇到过同样的问题.使用localhost在本地计算机上进行测试时,ResponseJSON将被填充.当我将我的项目上传到测试服务器并进行测试时,我的responseJSON是未定义的,而responseTEXT只是给出了我发送的状态描述:(
这是一个JSONResult,但我已将其作为ActionResult完成)

Response.StatusCode = 400;
Response.StatusDescription = "Bad Request - Model State is Invalid";
return Json(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)), JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)

而对于ActionResult,我也尝试过:

return new HttpStatusCodeResult(400, new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)));
Run Code Online (Sandbox Code Playgroud)

这给了我一堆错误.

我尝试使用JsonResult下面的代码,它在本地工作(但我在JSON中有语法错误),但在测试服务器上没有工作.

return Json(new { success = false, responseJSON = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)) }, JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)

当我使用AJAX请求将表单模型提交给MVC控制器时,这是最近的测试(上面).我读到这是因为它是跨域的,但这没有任何意义.

我创建了一个Web API控制器并将方法信息放在那里.这是因为我想使用HttpReponseMessage,我认为这是一个WebAPI类型.在获得模型和json以及一切协同工作之后,我测试并猜测了什么?

当我在WebAPI中使用HttpResponseMessage作为返回类型并返回如下:

return Request.CreateResponse(HttpStatusCode.BadRequest, new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)));
Run Code Online (Sandbox Code Playgroud)

responseJSON和responseText都正确填充.

我不知道为什么它不起作用,如果有人对此有回应,请告诉我们.

对我来说这是一个解决方法,因为我觉得它应该是第一种方式.

更新:使用ORIGINAL代码和MVC控制器 - 并添加

Response.TrySkipIisCustomErrors = true;
Run Code Online (Sandbox Code Playgroud)

使responseJSON出现.

  • @JuniorSilva使用Request.TrySkipIisCustomerErrors = true; 使用ActionResult在MVC控制器上返回Json(序列化模型错误,AllowGet); (2认同)