Ajax调用总是返回成功

时间:2013-11-01 07:58:33

标签: javascript jquery ajax asp.net-mvc

我对我的控制器进行了ajax调用,然后调用一个返回true或false的服务。我似乎无法弄清楚为什么当从控制器返回到视图时,这总是触发我的成功函数。

控制器

[HttpGet]
public JsonResult TagUnit(int id, string selectedItem)
{
    try
    {
        var result = UnitClient.TagUnit(id, selectedItem);
        if (!result)
        {
            throw new InvalidOperationException();
        }
        return Json(new {success = true}, JsonRequestBehavior.AllowGet);
    }
    catch (Exception e)
    {
        return Json(new {success = false}, JsonRequestBehavior.AllowGet);
    }
}

Cshtml - Javascript - Ajax

 .on("select2-selecting", function (e) {
            var url = '@Url.Content("~/UnitDetails/TagUnit/" + Model.ViewUnitContract.Id)';
            var id = e.val;
            var tagName = e.object.text;
            console.log(id + " : " + tagName);

            $.ajax({
                url: url,
                data: { selectedItem: tagName },
                type: 'GET',
                dataType: 'json',
                success: function () {
                    alert('Success');
                },
                error: function () {
                    alert('Error');
                }
            });
        }).select2('val', ['1', '2']);

我在这里缺少什么?

3 个答案:

答案 0 :(得分:3)

您应该以成功方法验证服务器结果数据。

 $.ajax({
     url: url,
     data: { selectedItem: tagName },
     type: 'GET',
     dataType: 'json',
     success: function (data) {
        if (data != null && data.success) {
            alert('Success');
        } else {
            alert('Error');
        }
     },
     error: function () {
        alert('Error');
     }
 });

错误方法调用如果在服务器上发生500错误或服务器不可用等等。

答案 1 :(得分:0)

我认为如果你抛出异常,它仍然会返回成功状态代码。所以我所做的是创建一个可以附加到MVC方法的ajax调用错误处理程序属性。它将捕获未捕获的异常,设置错误状态代码并提供一般错误消息(并且还记录到Elmah)。该属性位于

之下
public class HandleJsonErrorAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        var serviceException = filterContext.Exception as Exception;

        filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;

        filterContext.Result = new JsonResult
        {
            Data = new
            {
                errorMessage = "Generic error message", 
                errorType = 0

            },
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };

        var kayttaja = (Kayttaja.TKayttajantiedot)filterContext.HttpContext.Session["userKayttajanTiedot"];
        Global.HandleApplicationError(serviceException, kayttaja);

        filterContext.ExceptionHandled = true;

        // Log to elmah
        //Elmah.ErrorSignal.FromCurrentContext().Raise(filterContext.Exception);
    }
}

然后装饰你的动作方法,这些方法只能由Ajax用[Campus.Attribuutit.HandleJsonError]

调用

在ajax调用对象中触发错误处理程序的重要行是HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError

答案 2 :(得分:0)

不知道我是否理解你的问题。

如果请求成功,将在Ajax中执行

成功功能。如果请求失败,将执行错误功能。您必须检查服务器在成功函数内返回的内容。

http://api.jquery.com/jQuery.ajax/