我从客户端通过HTTPService调用服务器方法。服务器是RestFul Web服务,它可能会响应许多HTTP错误代码之一(例如,一个错误为400,另一个错误为404,另一个错误为409)。我一直在试图找出确定服务器发送的确切错误代码的方法。我已经在我的错误处理程序中填充了FaultEvent的整个对象树,但是没有它告诉我错误代码。这是Flex中缺少的功能吗?
我的代码如下所示: HTTP服务声明:
<mx:HTTPService id="myServerCall" url="myService" method="GET"
resultFormat="e4x" result="myServerCallCallBack(event)" fault="faultHandler(event)">
<mx:request>
<action>myServerCall</action>
<docId>{m_sDocId}</docId>
</mx:request>
</mx:HTTPService>
我的错误处理程序代码如下:
private function faultHandler(event : FaultEvent):void
{
Alert.show(event.statusCode.toString() + " / " + event.fault.message.toString());
}
答案 0 :(得分:4)
我可能在这里遗漏了一些东西,但是:
event.statusCode
给我HTTP响应的状态代码。
所以我可以在我的错误处理函数中成功地做这样的事情:
public function handleFault(faultEvent:FaultEvent):void
{
if (faultEvent.statusCode == 401)
{
Alert.show("Your session is no longer valid.", "", Alert.OK, this, loginFunc);
}
else
{
Alert.show("Failed with error code: " + faultEvent.statusCode as String);
}
}
答案 1 :(得分:3)
看起来你运气不好:http://fantastic.wordpress.com/2007/12/26/flex-is-not-friendly-to-rest/
您可能必须使用ExternalInterface在JS中处理此问题,然后将其传达给Flex。
答案 2 :(得分:1)
Flash Player需要浏览器的帮助才能访问HTTP状态代码;因此,并非所有平台都提供此功能。对我来说,它在Flash Player 10.3.183.11和Firefox 3.6.26中失败了,但在Windows 7上使用IE 8。
FaultEvent.statusCode
属性的Adobe帮助暗示了这一点,但遗憾的是没有详细说明:
此属性提供对HTTP响应状态代码(如果可用)的访问,否则值为0
所以,如果你绝对需要状态代码,运气不好;如果它只是为某些频繁的错误条件生成更好或更友好的错误消息,那么它就足够了。
答案 3 :(得分:1)
as3httpclient对Rest友好,并为您提供HTTP状态代码,只要您为AIR而不是基于浏览器的应用程序开发。
即使向同一个来源发出请求,我也无法从浏览器中获取as3httpclient。有documentation表示您需要设置套接字策略文件服务器才能使其正常工作。我们的用途不具备可扩展性,因此我在运行Flex应用程序的同一主机上设置了代理Web服务。
我使用HTTPService来调用代理Web服务,代理Web服务将请求转发到目标,代理Web服务将http状态代码和消息正文返回给xml中的HTTPService。
答案 4 :(得分:0)
尝试使用此代替HTTPService: http://code.google.com/p/as3httpclient/