这是一个我现在努力解决退出问题的问题 我有一个python + GAE后端,有一个通过JSON进行通信的flex客户端。我正在使用flex的HttpService绑定到具有结果和错误回调的Responder。
当python引发异常时,我似乎没有在flex中获取它。我做了一些研究,发现问题可能在于flash运行时无法处理状态代码不是200的http响应。
那么如何在客户端中获取这些异常呢?
由于
答案 0 :(得分:1)
TL; DR - 在Python中捕获异常并将自定义JSON对象与要显示给客户端的消息一起发送回Flex。
这是我遵循的模式。我将给出的示例是在C#中,但我假设可以将相同的原则应用于Python。
我在Web服务中处理异常并发送一个包含我想要显示给用户的错误的JSON对象。
我在这里发现错误:
try
{
string jsonResponse = doStuff();
return Json(jsonResponse, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new GetTokenError(ex.Message), JsonRequestBehavior.AllowGet);
}
这是我用来转换为JSON并返回客户端的返回对象:
/// <summary>
/// Used for displaying consistent error messages
/// </summary>
public class GetTokenError
{
/// <summary>
/// Ctor
/// </summary>
/// <param name="error">Error message to display</param>
public GetTokenError(string error)
{
this.error = error;
}
/// <summary>
/// The error to display
/// </summary>
public string error { get; set; }
}
使用此方法将始终返回200,除非您的Web服务器出现问题,客户端和Web服务器之间的连接或者gremlins已经感染了您的计算机。
至于flex方面,这是我的结果处理程序:
var http:HTTPService = new HTTPService();
http.method = "POST";
http.resultFormat = HTTPService.RESULT_FORMAT_TEXT;
http.url = "http://url.com";
http.addEventListener(ResultEvent.RESULT, function(evt:ResultEvent):void {
try {
var ret:Object = JSON.decode(evt.result.toString());
if (ret.error)
{
// handle server error
}
// go about task
} catch (e:Error) {
// handle local error
}
});
http.addEventListener(FaultEvent.FAULT, function(ex:FaultEvent):void {
// handle error with the call
});
http.send();