Actionscript 3 如何在HTTPService错误处理程序中获取HTTP状态代码
我正在通过HTTPService从客户端调用一个服务器方法。该服务器是一个RestFul web服务,它可能会响应许多HTTP错误代码中的一个(例如,一个错误为400,另一个错误为404,另一个错误为409)。我一直在试图找出确定服务器发送的确切错误代码的方法。我已经浏览了故障处理程序中填充的FaultEvent的整个对象树,但它没有告诉我错误代码在哪里。这是Flex中缺少的功能吗 我的代码如下所示: HTTP服务声明:Actionscript 3 如何在HTTPService错误处理程序中获取HTTP状态代码,actionscript-3,apache-flex,flex3,Actionscript 3,Apache Flex,Flex3,我正在通过HTTPService从客户端调用一个服务器方法。该服务器是一个RestFul web服务,它可能会响应许多HTTP错误代码中的一个(例如,一个错误为400,另一个错误为404,另一个错误为409)。我一直在试图找出确定服务器发送的确切错误代码的方法。我已经浏览了故障处理程序中填充的FaultEvent的整个对象树,但它没有告诉我错误代码在哪里。这是Flex中缺少的功能吗 我的代码如下所示: HTTP服务声明: <mx:HTTPService id="myServerCa
<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>
看来你运气不好:
您可能需要使用ExternalInterface在JS中处理此问题,然后与Flex通信。Flash播放器需要浏览器的帮助才能访问HTTP状态代码;因此,这并非在所有平台上都可用。对我来说,FlashPlayer10.3.183.11和Firefox3.6.26都失败了,但在Windows7上使用了IE8 有关
FaultEvent.statusCode
属性的Adobe帮助提示了这一点,但遗憾的是没有详细介绍:
此属性提供对HTTP响应状态代码(如果可用)的访问,否则该值为0
所以,如果你绝对需要状态码,那就倒霉了;如果只是为了针对某些常见的错误情况生成更好或更友好的错误消息,那么这可能就足够了。尝试使用此服务而不是HTTPService:
我可能遗漏了一些东西,但是:
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);
}
}
正如Ross所发布的,只要您是为AIR而不是基于浏览器的应用程序开发的,它对Rest很友好,并为您提供HTTP状态代码
我无法让as3httpclient从浏览器中工作,即使在向同一来源发出请求时也是如此。您需要设置一个套接字策略文件服务器以使其正常工作。对于我们的使用,不可扩展,因此我在运行flex应用程序的同一台主机上设置了代理web服务
我使用HTTPService调用代理web服务,代理web服务将请求转发到目的地,代理web服务将http状态代码和消息正文以xml形式返回给HTTPService。欢迎使用SO。我添加了as3httpclient的链接,以供参考和方便使用。
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);
}
}