如何在FLASH中加载PHP动态生成的XML

如何在FLASH中加载PHP动态生成的XML,php,html,xml,flash,actionscript-3,Php,Html,Xml,Flash,Actionscript 3,悬赏问题更新 在Flash中,我需要加载一个动态生成的XML文件,该文件是使用PHP创建的 我正在使用[Bulk loader library][1]进行所有加载 目前我的Flash只能加载一个手动创建的XML文件,我需要Flash做的是加载一个PHP生成的XML文件,如下所示: ---删除XML路径--- 当我使用PHP生成的XML文件在Flash中测试电影时,它会工作,但问题在于,当我尝试在HTML页面中本地测试或在线测试时。由于从XML获取数据时出现一些问题,Flash无法完全呈现 这里

悬赏问题更新

在Flash中,我需要加载一个动态生成的XML文件,该文件是使用PHP创建的

我正在使用[Bulk loader library][1]进行所有加载

目前我的Flash只能加载一个手动创建的XML文件,我需要Flash做的是加载一个PHP生成的XML文件,如下所示:
---删除XML路径---

当我使用PHP生成的XML文件在Flash中测试电影时,它会工作,但问题在于,当我尝试在HTML页面中本地测试或在线测试时。由于从XML获取数据时出现一些问题,Flash无法完全呈现


这里有一些链接显示我现在的位置:

<div>
    <h2>Testing TEN player on external domain</h2>
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="301" height="353">
    <param name="movie" value="http://www.domain1.com/N/N.swf">
    <param name="quality" value="high">
    <param name="flashVars" value="theXML=http://dev.domain2.com/admin2/client.php?id=2" />
    <embed src="http://www.domainname.com/N/N.swf" flashVars="theXML=http://dev.domain2.com/admin2/client_user.php?id=2" allowscriptaccess="always" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="301" height="353">
    </embed>
    </object>
</div>
[使用手动生成的XML文件刷新][2]
^使用:[XML文件][3]

[Flash使用PHP生成的XML文件][4]
^用法:[PHP生成的XML文件][5]


我在Bulk loader Wiki上搜索了如何加载PHP文件和加载类型信息,找到了以下内容:[


代码片段 以下是我当前加载XML文件的代码:
XML”变量是从HTML中的FlashVars获取的

private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);

        stage.scaleMode = StageScaleMode.NO_SCALE;
        stage.align     = StageAlign.TOP_LEFT;
        theXML          = this.loaderInfo.parameters.theXML;
        loader          = new BulkLoader("bulky");
        loader.logLevel = BulkLoader.LOG_INFO;
        loader.addEventListener(BulkLoader.COMPLETE, onBulkLoadComplete);
        loader.addEventListener(BulkLoader.PROGRESS, onBulkLoadProgress);

        /* ------------------------------------------- TESTING */
        //Below is manual XML, works when tested local & online
        //loader.add("client_user.xml",{id:"xmldata"});

        //Below uses PHP generated XML, works when tested in Flash, but no where else
        //loader.add("--- XML path removed ---",{id:"xmldata", type:"xml", maxTries: 6, preventCache:true});

        /* ------------------------------------------- LIVE */
        //loader.add(theXML,{id:"xmldata"});
        loader.add(theXML,{id:"xmldata", type:"XML", maxTries: 6, preventCache:true});

        loader.start();
    }


onBulkLoadComplete代码

private function onBulkLoadComplete(e:Event):void
{
trace("[BulkLoader] COMPLETE"+"\r");

Global.xml   = loader.getXML("xmldata");
HEX          = Global.xml.config.hex.toString(),{id:"hex"};
globalWidth  = Global.xml.config.width.toString();
globalHeight = Global.xml.config.height.toString();
videoHeight  = (globalHeight - (thumbMenuH + videoY + spacedBtn));
controlsY    = (videoHeight + videoY);

trace("············· Config ·············");
//trace(" HEX          = "+HEX);
//trace(" globalWidth  = "+globalWidth);
//trace(" globalHeight = "+globalHeight);
//trace("··································");
//trace("\r");

// ------------------------------------------------------ XML ARRAY
var x, i;

for(x in Global.xml.tab) {
    for(i in Global.xml.tab[x].vid) {
        videos.push(Global.xml.tab[x].vid[i].@flv);
        thumbTitles.push(Global.xml.tab[x].vid[i].@title);
        thumbPaths.push(Global.xml.tab[x].vid[i].@thumb);
    }
}

// ------------------------------------------------------ XML ARRAYS            
videoName  = videos[0]; // Current video is the 1st video

drawBackground();
drawVideo();
drawControls();
drawTabMenu();

// -------------------------------- FIND DEFAULT IMAGE/VIDEO TO LOAD
for(x in Global.xml.tab) {
    for(i in Global.xml.tab[x].vid)     {
        if (Global.xml.tab[x].vid[i].@default == "true") {
            //override any flv qued in the display
            firstTitle = Global.xml.tab[x].vid[i].@title;
            vd.flvPath = Global.xml.tab[x].vid[i].@flv;

            //load the default thumbnail
            loader = new BulkLoader("thumb");
            loader.addEventListener(BulkLoader.COMPLETE, onThumbComplete);
            loader.add(new URLRequest(Global.xml.tab[x].vid[i].@thumb),{id:"defaultThumbnail"});
            loader.start();
            break;
        }
    }
}
}
HTML嵌入代码:

<div>
    <h2>Testing TEN player on external domain</h2>
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="301" height="353">
    <param name="movie" value="http://www.domain1.com/N/N.swf">
    <param name="quality" value="high">
    <param name="flashVars" value="theXML=http://dev.domain2.com/admin2/client.php?id=2" />
    <embed src="http://www.domainname.com/N/N.swf" flashVars="theXML=http://dev.domain2.com/admin2/client_user.php?id=2" allowscriptaccess="always" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="301" height="353">
    </embed>
    </object>
</div>

在外部域上测试10个播放器


问题: 1) 如何在Flash中加载以.php结尾的动态生成的XML文件,并在HTML中正确呈现Flash


更新 我们使用Flash读取PHP生成的XML文件,但是我们只能在Flash内部“测试电影”时才能查看工作结果。当我们试图让它在本地或在线HTML页面中工作时,它将无法正确呈现。

从您的输出:

Error #1088: The markup in the document following the root element must be well-formed.

问题似乎不在于加载程序,而在于PHP输出。通过直接从浏览器访问生成的XML并下载它,检查以确保输出与预期相符。如果您在文本编辑器中逐行查看输出,您可能会发现输出中的错误,或者您可以尝试使用XML编辑器查看如果发现问题。

尝试将此代码放在php文件的第一行:

header ("content-type: text/xml");

你确定你已经在你的在线测试TEN.swf中的
bulkloader
add
中输入了
type:“XML”
,因为我从你的PHP文件运行它时出错了吗

编辑:

<div>
    <h2>Testing TEN player on external domain</h2>
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="301" height="353">
    <param name="movie" value="http://www.domain1.com/N/N.swf">
    <param name="quality" value="high">
    <param name="flashVars" value="theXML=http://dev.domain2.com/admin2/client.php?id=2" />
    <embed src="http://www.domainname.com/N/N.swf" flashVars="theXML=http://dev.domain2.com/admin2/client_user.php?id=2" allowscriptaccess="always" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="301" height="353">
    </embed>
    </object>
</div>
从前面的TEN.swf读取字节码表明xml类型未放入:

0x000076  [ 0xd0 ]       GetLocal0                                                                
0x000077  [ 0x66 ]       GetProperty          QName(PrivateNamespace(""), "theXML")                                                    
0x00007a  [ 0x2c ]       PushString           "id"                                                    
0x00007d  [ 0x2c ]       PushString           "xmldata"                                                    
0x000080  [ 0x55 ]       NewObject            1                                                    
0x000082  [ 0x4f ]       CallPropVoid         QName(PackageNamespace(""), "add"), 2                                                    
现在它似乎工作了,显示字节码表明添加了xml类型

0x000076  [ 0xd0 ]       GetLocal0                                                                
0x000077  [ 0x66 ]       GetProperty          QName(PrivateNamespace(""), "theXML")                                                    
0x00007a  [ 0x2c ]       PushString           "id"                                                    
0x00007d  [ 0x2c ]       PushString           "xmldata"                                                    
0x000080  [ 0x2c ]       PushString           "type"        <===== here it is now                                            
0x000083  [ 0x2c ]       PushString           "xml"         <=====                                           
0x000086  [ 0x2c ]       PushString           "maxTries"                                                    
0x000089  [ 0x24 ]       PushByte             0x6                                                    
0x00008b  [ 0x2c ]       PushString           "preventCache"                                                    
0x00008e  [ 0x26 ]       PushTrue                                                                 
0x00008f  [ 0x55 ]       NewObject            4                                                    
0x000091  [ 0x4f ]       CallPropVoid         QName(PackageNamespace(""), "add"), 2                                                    
0x000076[0xd0]GetLocal0
0x000077[0x66]GetProperty QName(私有名称空间(“”,“theXML”)
0x00007a[0x2c]推送字符串“id”
0x00007d[0x2c]推送字符串“xmldata”

0x000080[0x2c]推送字符串“类型”嘿,谢谢,我现在正在和PHP的家伙聊天,看看我们是否能正确生成文件。原始XML文件将加载没有问题,但我还被告知mimeType需要是text/XML,这是PHP方面的内容。它可能很简单,就像一个节点缺少结束标记一样。因为正在生成文档,而不是如果是手写的,这可能是代码逻辑中的一个微妙之处。加载程序似乎认为根级别元素后存在无效语法。您可以尝试使用一些工具验证文档。该工具通常会在XML中指定语法错误,PHP人员可以检查PHP代码中的问题。呃,当您在Flash本身的观点,但上传后仍然存在问题:(好的,在再次查看所有内容后,PHP开发人员说这是最接近的答案:)PHP开发人员仍在进行这方面的工作,希望我能尽快对其进行测试!我已经将其放入PHP文件中。它最初就在该文件中。我相信是这样,根据BulkLoader的wiki:这就是我发现这段代码的地方:bulkInstance.add(“,{type:'xml});是的,你必须把它放进去;)问题是它真的放进了你的TEN.swf,重新编译并联机了吗?=>TypeError:Error#1010我看到你已经用XML类型更改了你的swf,现在它工作了