我正在使用Jquery作为我的JSON帖子并获得。
我遇到的问题是我不知道如何回应我的MVC控制器以使其达到'失败'。
我正在使用MVC.NET,我没有使用web.api
我的ajax应该很熟悉(代码片段已经定义了变量):
$.ajax({
type: type,
url: url,
contentType: "application/json;",
data: data,
dataType: "json",
success: function (response) {
successDelegate(response);
},
failure: function (e) {
failDelegate(e.statusText);
},
error: function (e) {
errorDelegate(e.statusText);
}
我遇到的问题是每次回归都会成功。
所以我的MVC控制器可能是
[HttpPost]
public JsonResult Create()
{
//logic removed
return Json(new { IsError = true, Message = "The captcha code is not vaid" });
}
我明白为什么它取得了成功...它正在按照我的意愿返回,我可以简单地验证IsError
但是最好以AJAX知道它是成功还是失败的方式返回它。
我已阅读Send JSON data via POST (ajax) and receive json response from Controller (MVC)但这只是关于收到回复(我已经开始工作),而不是关于回复的类型(如何使回复转到失败,而不是成功)。
答案 0 :(得分:1)
我认为,你走错了路。
您总是遇到
的代码块success: function() {}
因为这是成功请求的句柄。有一个像你的" IsError"的假旗。在您的JSON响应中,不会使您的HTTP响应失败。
在成功函数中解析json并使用if-else查找IsError,然后让您的UI对此作出反应。如果您的代码遇到错误回调,那么某些内容确实会被破坏并超出您的正常用户体验。我从来没有听说过jQuery失败的回调,但也许我从来没有偶然发现它。
无论如何:"成功"意味着jQuery可以发送请求并收到答案,这就是你想要工作的地方。
答案 1 :(得分:0)
有一种简单的方法可以在MVC中返回ajax错误。我是这样做的:
控制器:
yourTableViewCell.contentView.subviews.forEach { $0.removeFromSuperview() }
观点:
public JsonResult testCatch()
{
try
{
//some code here
return Json(new { success = true, Message = "Success!" });
}
catch (Exception ex)
{
Response.StatusCode = 500; //Write your own error code
Response.Write(ex.Message);
return null;
}
}
这样,如果try块中有任何错误,则不会调用.success()函数。而是调用.error()。