2014-04-15 11 views
-1

은 HTTP 요청이 완료된 후 (성공 및 오류)을 수행 한 후 HTTPService 객체의 참조를 검색 할 수 있음을 다른 사람이 알 수 있습니까? 다음은 HTTP 요청을 저장하는 간단한 테스트 응용 프로그램입니다. 응답 ("httpResult"및 "httpFault"기능)을 처리 할 때 어떤 호출이 성공/실패했는지 검색 할 수 없습니다.Flex HTTPService : 요청을 보낸 서비스를 검색하십시오.

항상

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" 
        initialize="init(event);"> 
<fx:Script> 
    <![CDATA[ 
     import mx.events.FlexEvent; 
     import mx.rpc.events.FaultEvent; 
     import mx.rpc.events.ResultEvent; 
     import mx.rpc.http.HTTPService; 

     private var calls:Array; 

     private function init(event:FlexEvent):void{ 
      calls = new Array(); 
      // working HTTP Call 
      test('http://v4.ipv6-test.com/api/myip.php'); 
      // not working HTTP Call 
      test('http://unknown.web.site.com/'); 
     } 
     private function test(URL:String):void{ 
      var service:HTTPService = calls[ calls.push(new HTTPService()) - 1]; 
      service.url = URL; 
      service.method = 'GET'; 
      service.addEventListener("result", httpResult); 
      service.addEventListener("fault", httpFault); 
      service.send(); 
     } 
     private function httpResult(e:ResultEvent):void{ 
      for(var i:int = calls.length; i>=0; i--){ 
       if(calls[i]==e.target || calls[i]==e.currentTarget){ 
        trace('Successful HTTP call found #' + i); 
        return; 
       } 
      } 
      trace('Successful HTTP call not found :('); 
     } 
     private function httpFault(e:FaultEvent):void{ 
      for(var i:int = calls.length; i>=0; i--){ 
       if(calls[i]==e.target || calls[i]==e.currentTarget){ 
        trace('Unsuccessful HTTP call found #' + i); 
        return; 
       } 
      } 
      trace('Unsuccessful HTTP call not found :('); 
     } 


    ]]> 
</fx:Script> 
<fx:Declarations> 
    <!-- Placer ici les éléments non visuels (services et objets de valeur, par exemple). --> 
</fx:Declarations> 
</s:WindowedApplication> 
+0

중복 것 같은데 : http://stackoverflow.com/questions/3009010/httpservice-resultevent- 플렉스 -3-2 대 플렉스 3-5 – Simmoniz

답변

0

내가 발견은, eeerahul의 대답에 감사 "을 (를) 찾을 수 없습니다 호출"이 응용 프로그램 출력 (HTTPService/ResultEvent with Flex 3.2 versus Flex >= 3.5)

플렉스 우리의 서비스를 숨길 개발 사람처럼 보인다 결과를 처리 할 때. 어쨌든 이벤트 개체의 비공개 (또는 보호 된) 속성 인 '요청'에 액세스하여 서비스 참조를 가져 오는 방법이 있습니다. 이 속성을 사용하면 호출을 수행 한 서비스에 결과를 연결할 수 있습니다.

내 문제를 해결 라인 :

var curr_request:Object = AbstractOperation(e.currentTarget).request; 

새로운 작업 코드 :

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" 
        initialize="init(event);"> 
<fx:Script> 
    <![CDATA[ 
     import mx.events.FlexEvent; 
     import mx.rpc.events.*; 
     import mx.rpc.events.FaultEvent; 
     import mx.rpc.events.ResultEvent; 
     import mx.rpc.http.AbstractOperation; 
     import mx.rpc.http.HTTPService; 

     private var calls:Array; 

     private function init(event:FlexEvent):void{ 
      calls = new Array(); 
      // working HTTP Call 
      test('http://v4.ipv6-test.com/api/myip.php'); 
      // not working HTTP Call 
      test('http://unknown.web.site.com/'); 
     } 
     private function test(URL:String):void{ 
      var service:HTTPService = calls[ calls.push(new HTTPService()) - 1]; 
      service.url = URL; 
      service.method = 'GET'; 
      service.addEventListener("result", httpResult); 
      service.addEventListener("fault", httpFault); 
      service.send(); 
     } 
     private function httpResult(e:ResultEvent):void{ 
      var curr_request:Object = AbstractOperation(e.currentTarget).request; 
      for(var i:int = calls.length-1; i>=0; i--){ 
       if(calls[i].request==curr_request){ 
        calls[i].removeEventListener("result", httpResult); 
        calls[i].removeEventListener("fault", httpResult); 
        trace('Successful HTTP call found #' + i); 
        return; 
       } 
      } 
      trace('Successful HTTP call not found :('); 
     } 
     private function httpFault(e:FaultEvent):void{ 
      var curr_request:Object = AbstractOperation(e.currentTarget).request; 
      for(var i:int = calls.length-1; i>=0; i--){ 
       if(calls[i].request==curr_request){ 
        calls[i].removeEventListener("result", httpResult); 
        calls[i].removeEventListener("fault", httpResult); 
        trace('Unsuccessful HTTP call found #' + i); 
        return; 
       } 
      } 
      trace('Unsuccessful HTTP call not found :('); 
     } 


    ]]> 
</fx:Script> 
<fx:Declarations> 
    <!-- Placer ici les éléments non visuels (services et objets de valeur, par exemple). --> 
</fx:Declarations> 
</s:WindowedApplication>