如何返回JSON以使其遇到ajax失败

时间:2017-09-19 17:35:59

标签: jquery json ajax asp.net-mvc

我正在使用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)但这只是关于收到回复(我已经开始工作),而不是关于回复的类型(如何使回复转到失败,而不是成功)。

2 个答案:

答案 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()。