如何将自定义异常消息返回给Ajax调用?

时间:2012-06-20 21:26:10

标签: c# asp.net jquery

我想在ajax请求错误时返回特定的消息。

[WebMethod]
public static AjaxReturnObject SubmitWager(string token, string track, string race, string amount, string pool, string runners)
{
    try
    {
        var serviceReturn = Services.Account.SubmitWager("", track, race, pool, amount, runners);
        return new AjaxReturnObject(serviceReturn.AccountToken, serviceReturn.Payload);
    }
    catch (CustomServiceException<string> e)
    {
        throw new Exception(e.Message);
    }
}

调试说当我需要时它会碰到我的捕获,但是当我在我的jquery中查看xhr时,ajax会调用它总是说&#34;处理请求时出错。&#34;

error: function (xhr, textStatus, errorThrown) {
            log(xhr, textStatus, errorThrown);
}

如何在xhr.responseText下收到我想要的回复ajax调用的消息?

2 个答案:

答案 0 :(得分:4)

在catch块中尝试Throw而不是Throw new。一旦你解析XHR.responseText,异常消息将包含在“消息”中 例如:

$.ajax({
       type: "POST",
       //... other parameters
       error: function(XHR, errStatus, errorThrown) {
             var err = JSON.parse(XHR.responseText);
             errorMessage = err.Message;
       }
});

答案 1 :(得分:1)

也许更好的方法是使用检查成功标志的代码定义AJAX请求的成功回调:

<强> c#中

[WebMethod]
public static AjaxReturnObject SubmitWager(string token, string track, string race,   string amount, string pool, string runners)
{
try
{
    var serviceReturn = Services.Account.SubmitWager("", track, race, pool, amount, runners);
    return new AjaxReturnObject(serviceReturn.AccountToken, serviceReturn.Payload);
}
catch (CustomServiceException<string> e)
{
    return new AjaxReturnObject(0, e.Message();
}
}

<强>的Javascript

$.ajax({
  ...
  success: function (data) {
    if (data.AccountToken == 0) {
      // There was an error 
      log(data.Payload);
    }
    else {
      // your code
    }
  }
});

我提供这种替代方案,因为我不确定如果你在服务器端代码中抛出错误,该函数会返回任何内容。您收到的错误是客户端,error回调实际上是指是否可以发出请求。