1

下面是我的函数(第一个代码段),当我在函数下面运行时,它通过我的处理程序进入我的代码,并在我的代码中抛出异常(第二个代码段),在捕获异常后,它返回到我的处理程序和get在catch区域内,最后返回javascript成功函数,但是error它没有运行error部分。

    BenefitOperations.performBenefitOperation = function(data) {
      $.ajax({
        type: "POST",
        url: "BenefitOperation.axd",
        data: JSON.stringify(data.BenefitOperationJson),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        beforeSend: function() { PageMask.show(); },
        success: function(response) {
          if (response.Success == true)
            performPostBack();
          else
            window.alert(Res.BenefitOperationFailure);
    },
    error: function(e, x, y) { window.alert(Res.BenefitOperationError + y); }   }); }

这是我的功能

    else
    {
        throw new ApplicationException(string.Format("Benefit operation type {0} for benefit type {1} is not registered", Enum.GetName(typeof(EmployeeBenefitData.BenefitOperationType), parameters.OperationTypeID), Enum.GetName(typeof(EmployeeBenefitData.BenefitTypeEnum), parameters.BenefitTypeID)));
    }

这是我的处理程序的捕获

    catch
    {

        jsonOutput = JsonConvert.SerializeObject(new
        {
            Success = false
        });
    }
    finally
    {
        context.Response.Clear();
        context.Response.ContentEncoding = Encoding.UTF8;
        context.Response.ContentType = "application/json";
        context.Response.Write(jsonOutput);
    }
4

2 回答 2

5

error回调$.ajax()不会在您的代码中被调用,因为没有错误。error表示检索响应时出现问题,例如。来自服务器的 500 错误。

在您的代码中,您正在捕捉ApplicationException自己并返回 JSON。如果您更喜欢使用error处理程序,请引发异常并且不要在 C# 代码中捕获它 - 但是应该注意您当前的代码是更好的方法。

于 2013-09-17T11:04:29.327 回答
0

Rory 是对的,只需在遇到错误/异常或操作失败时设置 HTTP 500 状态代码。

您可以设置 HTTP 500 状态代码,例如...

context.Response.StatusCode = 200;
于 2013-09-17T11:23:23.660 回答