检测ajax调用是否成功

时间:2012-01-27 19:44:26

标签: asp.net-mvc-3 jquery razor

这是我的ajax电话

$.ajax({
            type: "POST",
            url: "MyMethod",
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify({  Param1: 'value1', Param2: 'value2'}),
            success: function (msg) { location.href = '@Url.Action("MyActionMethod", "MyController")'; },
            error: function (msg) { alert(msg); }
        });

这是我的模特

public class MyModel
{
    public string Param1 { get; set; }
    public string Param2 { get; set; }
}

MyMethod实现如下

public bool MyMethod(MyModel model)
{

    if (!ValidateModel(model) )
    {
        // I want to error a descriptive error  
        return false;
    }

    // Some other processing
    return true;
}

问题是我不知道它是如何确定呼叫是成功还是失败的。返回ture / false似乎没有帮助,因为代码总是进入成功代码路径(即它重定向到MyController.MyActionMethod)。任何想法我做错了

2 个答案:

答案 0 :(得分:3)

这通常就是我所做的:

public JsonResult MyMethod(MyModel model)
{
    var success = true;
    var result = string.Empty;

    if (!ValidateModel(model) )
    {
        // I want to error a descriptive error  
        success = false;
        result = "Invalid model";
    }

    // Some other processing
    return Json(new { success = success, error = result }, 
        JsonRequestBehavior.Allow);
}

请注意从boolJsonResult的退货方式的变化。然后在JavaScript中,您可以测试JSON对象上的属性:

...
success: function (msg) { 
   if (msg.success) {
       location.href = '@Url.Action("MyActionMethod", "MyController")'; 
   } else {
       alert(msg.error);
   }
},
...

答案 1 :(得分:1)

为了触发jQuery的error处理程序,您需要返回HTTP错误 为此,请将Response.StatusCode设置为400(错误请求)。

或者,您可以从操作中返回JSON并在success处理程序中读取属性对象以获取错误消息或URL。