我正在使用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;
}
}
答案 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
}
}