如何使用externalInterface允许Flash调用javascript来更新屏幕上的值?

时间:2009-11-27 14:44:30

标签: php javascript flash function externalinterface

我有一个嵌入PHP页面的Flash电影。 PHP页面向用户显示一个值(他们上传的图像数量)。当用户上传新图像时,我希望PHP页面上的值反映更改而不刷新页面。

使用MySQL从数据库中检索此值。所以到目前为止我做了什么 -

在我要显示值的PHP页面上,我有一个div

<div id="content_info"><script type="text/javascript" src="getInfo.php?group= <?php echo($groupid); ?> "></script></div>

这会调用一个外部PHP文件来查询数据库并输出结果

Header("content-type: application/x-javascript");
//do the query with PHP and get $number and then output
echo "document.write(\" (".$number.")\")";

当页面第一次加载时,div中显示正确的数字,所以一切正常。下一步是在值更改时调用某些内容来更新此div的内容。所以我将在flash中设置externalInterface以调用javascript函数来执行此操作。

这就是我陷入困境的地方,我希望能够做到这样的事情 -

function ReplaceContentInContainer(id) {
var container = document.getElementById(id);
container.innerHTML = getInfo.php?type=new&group= <?php echo($groupid) ?>;
}

并通过

调用此方法
ReplaceContentInContainer(content_info)

我意识到这不会起作用,但任何人都可以告诉我如何获得这个结果?

非常感谢

1 个答案:

答案 0 :(得分:2)

仅当PHP创建页面时才会执行

group= <?php echo($groupid); ?>。您应该将该值存储在javascript中的变量中。看看是否有效。

<div id="scriptDiv">
    <script type="text/javascript">
    <!-- store the group id -->
        var groupID = <?php echo($groupid); ?>;
        function getGroupID()
        {
           return groupID;
        }
        function updateValue(value)
        {
           document.getElementById("content_info").innerHTML = value;
        }
    </script>
    <div id="content_info">
       <!-- for initial value -->
       <script type="text/javascript" 
            src="getInfo.php?group= <?php echo($groupid); ?> ">
       </script>
    </div>
</div>

现在您可以使用flash的URLLoader

var ldr:URLLoader = new URLLoader();
var gid:String = ExternalInterface.call("getGroupID");
var req:URLRequest = new URLRequest("getInfo.php");
req.data = {type:"new", group:gid};
ldr.addEventListener(Event.COMPLETE, onLoad);
ldr.addEventListener(IOErrorEvent.IO_ERROR, onError);
ldr.load(req);

private function onLoad(e:Event):void
{
    var data:String = URLLoader(e.target).data;
    ExternalInterface.call("updateValue", data);
}
private function onError(e:IOErrorEvent):void
{
    trace("ioError");
}