0

我的问题是:如何区分传递给视图的 JSON 消息?或者
如何区分 JSON 成功和错误消息?

我有以下 ajax 帖子和返回 JSON 的方法。但是无论发送到视图的任何消息,我都只会通过“成功”的第一个功能收到消息,即使代码隐藏失败,我也不会收到失败消息!

阿贾克斯邮报

        $('#CreateLesson').on('submit', function (e) {

            e.preventDefault();
            var lesson = $(this).serialize();
            var Url = $(this).attr('action');

            $.post(Url, lesson,
                function (d) { alert(JSON.stringify(d)); })
                .fail(function (response) { alert("error !!"); });

        });

方法返回 JSON

    [HttpPost]
    public JsonResult Create(Lesson lesson)
    {
        if (ModelState.IsValid)
        {
            _context.Add(lesson);
            _context.SaveChanges();
            return Json(lesson);
        }
        return Json("There is something went wrong!! The lesson hasn't been add");
    }

同样,我总是通过第一个函数返回方法结果。我怎么知道的?我从来没有得到第二个函数结果 Alert("error !!")

如果 ModelState.IsValid = false 我应该怎么做才能将 JSON 返回到第二个函数?

4

1 回答 1

0

如果服务器响应 HTTP 错误,则执行错误函数。虽然你的代码出错但你返回Json,这会得到Http Code 200,这是一个成功的响应。只有当你得到一个http错误代码时,才会触发ajax错误函数。

参考:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

您可以抛出异常以产生 Http 500 错误或返回 BadRequest 以产生 Http 400 错误。更改您的代码,如下所示:

public IActionResult Create(Lesson lesson)
{
    if (ModelState.IsValid)
    {
        return Json(lesson);         
    }
    //throw new Exception("There is something went wrong!! The lesson hasn't been add");
    return BadRequest("There is something went wrong!! The lesson hasn't been add");
}

返回 json 的结果:

在此处输入图像描述

Http 错误的结果: 在此处输入图像描述

于 2020-08-27T02:48:12.300 回答