2013-09-07 2 views
1

나는 액션 스크립트 3에 익숙하지 않지만 다른 언어를 사용합니다.액션 스크립트 3.0에서 문자열 반환

누군가가 나를 도울 수 있기를 바랍니다.

HTML에서 제공되는 것이 아니라 PHP 스크립트를 통해 rtmp 스트림이 검색되도록 JWplayer를 수정하려고합니다.

내가 현재 가지고있는 코드

은 다음과 같습니다 :

부하 기능에서
function useData(event:Event):void { 
      var data:String = event.target.data.toString(); 

     } 

     /** Load content. **/ 
     override public function load(itm:PlaylistItem):void { 
      _item = itm; 
      _position = 0; 

      var loader:URLLoader = new URLLoader(); 
      loader.addEventListener(Event.COMPLETE, useData); 
      loader.load(new URLRequest("http://192.168.0.12/phpauth/play1.php")); 

      // Set Video or StageVideo 
if(!_video) { 
       _video = new Video(320, 240); 
       _video.smoothing = true; 
       _video.addEventListener('renderState', renderHandler); 
       // Use stageVideo when available 
       if (_stageEnabled && RootReference.stage['stageVideos'].length > 0) { 
        _stage = RootReference.stage['stageVideos'][0]; 
        _stage.viewPort = new Rectangle(0,0,320,240); 
        _stage.addEventListener('renderState', renderHandler); 
       } 
       attachNetStream(_stream); 
      } 
      // Load either file, streamer or manifest 
      if (_item.file.substr(0,4) == 'rtmp') { 
       // Split application and stream 
       var definst:Number = _item.file.indexOf('_definst_'); 

가 재생할 수있는 파일 이름은 _item.file에서 개최된다. 나는 PHP 스크립트를 호출하여 _item.file의 값을 덮어 쓰려고합니다. php가 호출되고 있음을 확인했지만 useData 함수의 데이터 문자열에서 _item.file 문자열로 데이터를 가져 오는 방법을 모르겠습니다.

정말 도움이 될만한 도움이 될 것입니다. 저는 이것이 단순한 것 같지만 AS3 지식이 부족하여 정말 어렵게 만들고 있습니다.

감사합니다,

+0

안녕하세요, 아래 답변이 귀하의 케이스 해결에 도움이 되었습니까 ?? 만약 그렇다면, 실제 문제를 지정하여 다른 누군가에게 유용 할 수 있도록 질문을 업데이트하는 것이 가치 있다고 생각합니다. ... – catholicon

답변

1

당신이 PHP에서 간단한 문자열을 반환하는 경우는

event.target.data; 

예를 사용할 수 있어야합니다 PHP에서 ... echo "hello";

PHP를 통해 무언가를 얻으려면 응답을 추적 해보십시오. IDE에서 테스트하거나 Flash Player 브라우저 플러그인의 디버그 버전을 설치할 수 있습니다.

trace("Response from PHP: "+event.target.data); 

_item.file = event.target.data; 
trace("_item.file: "+_item.file); 
+0

감사합니다. PHP에서 데이터를 확실하게 반환합니다. 문제는 ' usedata 이벤트 핸들러 함수의 데이터 변수에서 _item.file 문자열에 문자열을 할당하는 방법을 알고 있어야합니다. –

1

기본적으로 이벤트 처리기에서 로컬 변수에 액세스하는 방법에 대한 문제입니다. 신속하고 더러운 방법은 핸들러 등 사용 익명 함수를 가질 수 있습니다 :이 익명 함수이기 때문에 load 함수 내부의 지역 변수에 액세스 할 수 있기 때문에

loader.addEventListener(Event.COMPLETE, function(event:Event):void { 
    var data:String = event.target.data.toString(); 
    _item.file = data; 
}); 

이 방법, 작동합니다. 그러나 익명 함수는 호출 함수가 사용하는 것과 똑같은 변수를 사용한다는 것에주의해야합니다. 루프의 모든 반복에서 load 함수에 루프가 있고 _item 변경이 있다고 가정 해 봅시다. 이 시나리오에서로드 핸들러가 호출되면 _item도 마지막으로 _item에 할당 된 오브젝트로 변경됩니다.

package { 
public class LoadHandler { 
    private var _item:PlaylistItem; 

    public function LoadHandler(item:PlaylistItem) { 
     _item = item; 
    } 

    public function loadHandler(event:Event):void { 
     var data:String = event.target.data.toString(); 
     _item.file = data; 
    } 
} 

다음 loader.addEventListener(Event.COMPLETE, (new LoadHandler(_item)).loadHandler) 있습니다

중 파 깨끗하고 OO 접근 방식은 같은 핸들러 클래스를 가질 수 있습니다. 희망이 도움이됩니다. BTW, LoadHandler은 사용할 개체와 콜백 함수를 취하고 배열하기 위해 좀 더 일반적으로 만들 수 있습니다. loadHandler 함수를 사용하면 해당 객체 배열로 콜백 함수를 호출 할 수 있습니다.

+0

안녕하세요. 정말로 도움을 주셔서 감사합니다. 첫 번째 코드 스 니펫을 시도했지만 전반적인 결과는 같습니다. 나는 _item.file이 이벤트 핸들러 함수 내에서 로컬 변수로 할당되어 있으므로 호출 load() 함수 내에서 변경하려는 변수에 아무런 영향을 미치지 않는다고 생각합니다. 나는 일종의 데이터 기능 또는 뭔가를 가져야한다고 생각한다. –

+0

내 대답에 대한 귀하의 의견을 후 귀하의 코드를 확인하고 substr (,) == 'rtmp'를 확인하면 _item.file은 빈 문자열이라고 생각합니다. 이는 AS3이 이벤트 드라이브이기 때문입니다. load() 함수의 실행이 완료 될 때까지 FP는 play1.php의로드를 시작하지 않습니다. 따라서 나머지 코드는 이벤트 처리기로 옮겨야합니다. – catholicon

관련 문제