如何将错误返回到ajax请求

时间:2015-04-30 13:46:03

标签: c# jquery asp.net ajax

我有一个我从ajax调用的WebMethod - 如果抛出错误,如果类型不是字符串/ int等,如何将其返回到ajax请求?

[WebMethod]
public static List<SchedulerResource> getResourcesOnCall(Guid instructionID, bool ignorePostcode, int pageIndex, int pageSize)
{
    int totalRows = 0;
    List<SchedulerResource> schedulerResourceDS = null;

    try
    { 
        schedulerResourceDS = NewJobBLL.GetResourcesOnCall(instructionID, ignorePostcode, pageIndex, pageSize, ref totalRows);

        return schedulerResourceDS;
    }
    catch (Exception ex)
    {
        // what do I send back here?
    }

    return schedulerResourceDS;
}

这是我的ajax - 我希望.fail能够处理异常ex:

var requestResource = $.ajax({
    type: "POST",
    url: "NewJob.aspx/getResourcesDayShift",
    data: JSON.stringify(objResource),
    contentType: "application/json; charset=utf-8",
    dataType: "json"
});

requestResource.done(function (data) {
    if (data.d.length == 0) {
        $("#lblEngineersDayShift").text("There are no Engineers available!");
    }
    else {
        loadTableDS(data);
    }
});

requestResource.fail(function (jqXHR, textStatus, errorThrown) {
    alert('loading of Engineers failed!' + jqXHR.responseText);
});

编辑:我认为它不重复 - 我问如何从我的WebMethod返回statusCode(int)或statusText(string),如果它的类型是List&lt; SchedulerResource&gt;。因此我收到以下错误:

  

无法将类型'System.Net.HttpStatusCode'隐式转换为'System.Collections.Generic.List'

catch (WebException ex)
{
    var statusCode = ((HttpWebResponse)ex.Response).StatusCode;

    return statusCode;
}

1 个答案:

答案 0 :(得分:1)

您可以让方法返回object而不是List<SchedulerResource> 或者尝试将JSON字符串返回给客户端。这样您就可以灵活选择要返回的内容。

可以找到一个很好的例子here

要将对象序列化为JSON,您可以使用JavaScriptSerializer

我不使用ASP.NET,但在ASP.NET MVC中,这看起来像这样: 您可以让方法返回JsonResult而不是List<SchedulerResource>

return Json(schedulerResourceDS, JsonRequestBehavior.AllowGet);

然后,如果发生错误,您可以返回

Response.StatusCode = 500;
return Json(new {error = ex.Message}, JsonRequestBehavior.AllowGet);