【问题标题】:JSON.parse error: unexpected character after project releaseJSON.parse 错误:项目发布后出现意外字符
【发布时间】:2019-08-07 19:28:39
【问题描述】:

在我看来,我使用了 jquery.unobtrusive-ajax。 在这个视图中,有一个表单是通过 ajax 提交的。

如果模型集无效,我会通过下面的代码返回错误

 Response.StatusCode = (int)HttpStatusCode.BadRequest;
 return Json(new { errors = ModelState.Values.SelectMany(v => v.Errors) });

在下面的代码视图中,我向用户显示了错误。

        function failed(err1) {
        obj = JSON.parse(err1.responseText).errors;
        console.log(obj);
        EmptyValidationErrors();
        jQuery.each(obj, function (i) {
            //alert(obj[i].ErrorMessage);
            AddValidationError(obj[i].ErrorMessage);
            ShowValidationErrors();
        });
    }

SyntaxError:JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符

【问题讨论】:

  • 尝试console.log(err1.responseText)检查控制器动作返回的json响应
  • err1.responseText "错误请求"
  • 但在 localhost 中返回:"{\"errors\":[{\"Exception\":null,\"ErrorMessage\":\"Message text\"}]}"

标签: asp.net json asp.net-mvc-5 unobtrusive-ajax


【解决方案1】:

自定义错误模式

使用 400 http 代码处理响应是 IIS 行为。因此,您需要删除该行

Response.StatusCode = (int)HttpStatusCode.BadRequest;

并在您的回复中添加额外的数据。像这样:

if (ModelState.IsValid) {
  return Json(new { success = true });
}

return Json(new { success = false, errors = ModelState.Values.SelectMany(v => v.Errors) });

并在您的 JS 代码中这样阅读:

$.ajax({
  url: url,
  method: 'POST',
  success: function(data) {
    if (!data.success) {
      $.each(data.errors, function(i, error) {
         AddValidationError(error.ErrorMessage);
      });
      ShowValidationErrors();
    }
  }
});

在您的Web.config 中,您可以找到这样的部分:

<customErrors mode="Off">
</customErrors>

mode="Off" 在部署过程中重写为mode="On",因此在生产中,任何带有 400 代码的响应都以另一种方式处理,而不是在调试时。在Web.Release.config 你可以找到这部分具体重写的内容

更新

另一种解决方案:

Response.TrySkipIisCustomErrors = true;
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(new { errors = ModelState.Values.SelectMany(v => v.Errors) });

这将停止处理自定义错误mode="On",resposne 将包含您的 json 错误。

【讨论】:

    猜你喜欢
    • 2012-01-21
    • 2014-04-17
    • 2021-07-26
    • 1970-01-01
    • 2013-06-02
    • 2013-12-02
    • 1970-01-01
    • 2012-03-30
    相关资源
    最近更新 更多