我有下面的代码,在开发计算机上工作正常,但从远程浏览器调用时则不行......
$.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;
}
});
jqXHR.responseJSON 对象在从本地主机调用时有效,但在从远程计算机进行调用时无效,它返回为未定义... 有人可以帮助我吗? 预先感谢!
我也遇到过同样的问题。
当使用 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);
对于 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 都填写正确。
我不知道为什么它不起作用,如果有人对此有回应,请告诉我们。
对我来说,这是一种解决方法,因为我觉得它应该以第一种方式起作用。
更新: 将原始代码与 MVC 控制器一起使用 - 并添加
Response.TrySkipIisCustomErrors = true;
使responseJSON出现。
正如nebulous所建议的,
Response.TrySkipIisCustomErrors = true;
似乎是正确的方法。
不幸的是,大多数时候
IIS
会忽略这个属性,并跳过它(也许这就是开发者称它为Try
的原因......)。
但是,我解决了将其添加到
Web.config
上的问题:
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>
这更干净并且不会“弄脏”代码部分。
希望有帮助。