我一直有某种相同的问题。 当使用本地主机在本地机器上测试时,会填充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);
和ActionResult的具体我也试过:
return new HttpStatusCodeResult(400, new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)));
这给了我一堆错误。
我试着用JsonResult下面的代码,它本地工作(但我在JSON中有一个语法错误),但没有在测试服务器上工作。
return Json(new { success = false, responseJSON = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)) }, JsonRequestBehavior.AllowGet);
这是当我使用AJAX请求将表单模型提交给MVC控制器时的最近一次测试(上图)。我读到这是因为它跨域,但没有任何意义。
我创建了一个web API控制器,并将方法信息放在那里。这是因为我想使用HttpReponseMessage,我认为这是一个WebAPI类型。 得到模型和JSON和一切工作在一起后,我测试并猜测是什么?
当我使用HttpResponseMessage中的WebAPI返回类型和返回是这样的:
return Request.CreateResponse(HttpStatusCode.BadRequest, new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)));
的responseJSON和responseText的都正确填写。
我不知道为什么它不起作用,如果有人有回应,请告诉我们。
对我来说,这是一个解决方法,因为我觉得它应该是第一种方式。
UPDATE: 使用与MVC控制器 - 原代码和增加
Response.TrySkipIisCustomErrors = true;
作出responseJSON出现。
你用'jqXHR'取回了什么? – Jasen
嗨Jasen,谢谢你的回复!在开发机器中,它正确地返回一个responseJSON数组和一个带有json字符串的reponseText,但是当它从远程机器调用时,responseJSON对象不存在,返回null,并且responseText仅包含“Bad request message”因为我已经将响应状态代码签名为400.我用结果图片编辑了问题... –
控制台中有任何错误吗?它与CORS有什么关系?任何东西在控制台像“访问控制-Origin ....” – Developer