发布解析JSON响应

时间:2016-02-21 21:37:44

标签: javascript jquery asp.net json ajax

我正在使用AJAX / JQuery来调用WCF服务。我在服务端有一些.NET try / catch错误处理,它检查用户是否超时,如果有,那么我传回一个JSON转换的消息,然后我在客户端解析使用parseJSON并使用它来重定向用户返回登录页面。 这一切都很好,但我只是从服务返回的不同类型的错误,不是JSON格式(它是XML)所以错误处理函数在客户端尝试解析时出现javascript错误答复。错误发生在jquery.min.js文件中,并且是“无效字符”错误。

我的问题(最后),如果我不能总是依赖它作为JSON,是否有更好的方法来处理该回复?在.NET中,我们有一个可用的tryParse方法,但据我所知,JQuery / Javascript没有这样的功能。如果它无法解析回复,则会抛出JS错误。

以下是抛出自定义JSON异常的地方:

private HttpSessionState GetUserSession()
{
    HttpSessionState session = HttpContext.Current.Session;

    try
    {
        // This is a method we created that checks if user has timed out and throws the exception if so.
        SessionBuilder.Create(session, HttpContext.Current.Request, HttpContext.Current.Response);
    }
    catch (SessionTimeOutException e)
    {
        throw new WebFaultException<SessionTimeOutException>(new SessionTimeOutException(e.Message), System.Net.HttpStatusCode.BadRequest);
    }

    return session;
}

以下是处理我的AJAX请求中的错误的客户端代码:

error: function (HttpRequest)
{
    // This is the line that gets the exception because the responseText is a standard .NET XML error, not my custom JSON error.
    var parsedReply = $.parseJSON(HttpRequest.responseText);

    if (parsedReply.ClassName === "SessionTimeOutException")
    {
        var url = "../timeout.asp?" + parsedReply.Message;
        window.location.href = url;
    }
}

1 个答案:

答案 0 :(得分:1)

JavaScript也有try { ... } catch(ex) { ... }

error: function (HttpRequest)
{
    var parsedReply;

    try {
        parseReply = $.parseJSON(HttpRequest.responseText);

        if (parsedReply.ClassName === "SessionTimeOutException")
        {
            var url = "../timeout.asp?" + parsedReply.Message;
            window.location.href = url;
        }
    } catch(ex) {
        parsedReply = HttpRequest.responseText;

        //Do something else
    }
}