【问题标题】:Returning a string in Action Script 3.0在 Action Script 3.0 中返回字符串
【发布时间】:2013-09-07 11:58:35
【问题描述】:

我真的一点都不熟悉 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 知识使其非常困​​难。

谢谢,

【问题讨论】:

  • 嘿,下面的答案对您的案子有帮助吗?如果确实如此,我认为值得更新问题以指定实际问题,以便对其他人点击它有用....

标签: actionscript-3 jwplayer


【解决方案1】:

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

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

这种方法可行,因为这个匿名函数可以按原样访问load 函数中的局部变量。但是,您需要注意匿名函数使用的变量与调用函数使用的完全一样。所以,假设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)。希望有帮助。顺便说一句,LoadHandler 可以更通用地获取要使用的对象数组和回调函数。 loadHandler 函数,然后可以使用该对象数组调用回调函数。

【讨论】:

  • 您好,非常感谢您的帮助。我已经尝试过您的第一个代码 sn-p 但似乎总体结果是相同的。我认为 _item.file 被分配为事件处理函数中的局部变量,因此它对我想在调用 load() 函数中更改的变量没有影响。我想我需要某种获取数据功能之类的东西。
  • 在您对我的回答发表评论后,我检查了您的代码,当您检查 substr(,)=='rtmp' 时,我认为 _item.file 是空字符串。那是因为 AS3 是事件驱动的。在您的 load() 函数执行完成之前,FP 不会开始加载 play1.php。因此,您必须将其余代码移动到事件处理程序中。
【解决方案2】:

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

event.target.data;

例如来自 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);

【讨论】:

  • 谢谢,它肯定是从 PHP 返回数据,问题是我不知道如何从 usedata 事件处理函数中的 data 变量将字符串分配给 _item.file 字符串。
猜你喜欢
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 2020-12-27
相关资源
最近更新 更多