在Action Script 3.0中返回一个字符串

时间:2013-09-07 11:58:35

标签: actionscript-3 jwplayer

我真的不熟悉Action Script 3,但我和其他语言一样。

我希望有人可以帮助我。

我正在尝试对JWplayer进行修改,以便通过PHP脚本检索rtmp流,而不是在HTML中提供。

我目前的代码如下:

    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知识让它变得非常困难。

谢谢,

2 个答案:

答案 0 :(得分:1)

如果从PHP返回一个简单的字符串,你应该可以使用

event.target.data;

e.g。来自PHP ... echo“hello”;

var data:String = event.target.data

您可以尝试跟踪响应以确保从PHP获得回复。 您可以在IDE中对此进行测试,也可以安装Flash Player浏览器插件的调试版本。

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

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

答案 1 :(得分:1)

您的问题主要是关于如何在事件处理程序中访问局部变量。一种快速而肮脏的方法可以是将匿名函数用作处理程序,如:

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

这种方法可行,因为这个匿名函数可以按原样访问load函数内的局部变量。但是,您需要保持谨慎,即匿名函数完全按照调用函数的使用方式使用变量。所以,假设在load函数中有一个循环,并且在循环的每次迭代中都有_item个变化。对于该场景,当调用load handler时,其_item也将更改为最后分配给_item的对象。

更清晰的OO方法可以是一个处理程序类,如:

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)。希望有所帮助。顺便说一句,LoadHandler可以更加通用,以获取和使用的对象数组以及回调函数。 loadHandler函数,然后可以用该对象数组调用回调函数。