JSON.parse error: unexpected character after project release
JSON.parse error: unexpected character after project release
在我看来我用了jquery.unobtrusive-ajax。
在此视图中,有一个通过 ajax.
提交的表单
在操作中如果模型集无效,我会return通过下面的代码
错误
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: unexpected character at line 1 column 1 of the JSON data
自定义错误模式
IIS 的行为是处理 400 http 代码的响应。所以,你需要删除那行
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"
并且响应将包含您的 json 错误。
在我看来我用了jquery.unobtrusive-ajax。 在此视图中,有一个通过 ajax.
提交的表单在操作中如果模型集无效,我会return通过下面的代码
错误 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: unexpected character at line 1 column 1 of the JSON data
自定义错误模式
IIS 的行为是处理 400 http 代码的响应。所以,你需要删除那行
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"
并且响应将包含您的 json 错误。