【问题标题】:How to load PHP dynamically generated XML in FLASH如何在FLASH中加载PHP动态生成的XML
【发布时间】:2011-01-24 08:32:57
【问题描述】:

为赏金更新问题

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

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

目前我的 Flash 只能加载手动创建的 XML 文件,我需要 Flash 做的是像这样加载 PHP 生成的 XML 文件:
--- XML 路径已删除 ---

当我使用 PHP 生成的 XML 文件在 Flash 中测试电影时,它会起作用,但是当我尝试在 HTML 页面中本地测试或在线测试时,问题就出在了。由于从 XML 获取数据的一些问题,Flash 没有完全渲染。


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

[FLash 使用手动生成的 XML 文件][2]
^ 用途:[XML 文件][3]

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


我在 Bulk-loader Wiki 上搜索了如何加载 PHP 文件和加载类型信息,发现:[http://code.google.com/p/bulk-loader/][6]

bulkInstance.add("http://mysite.com/top-ten.php", {type:"text"});
bulkInstance.add("http://mysite.com/top-ten.php", {type:"xml"});
bulkInstance.add("http://mysite.com/top-ten.php", {type:"image"});


代码片段

这是我当前加载 XML 文件的代码:
'theXML' 变量是从 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();
    }



onBulkLoad完整代码

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>



问题:

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


更新

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

【问题讨论】:

    标签: php html xml flash actionscript-3


    【解决方案1】:

    试着把这段代码放在你的 php 文件的第一行:

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

    【讨论】:

    • PHP 开发人员仍在为此工作,希望我能尽快进行测试!
    • 我已经把它放到了 php 文件中。它最初在文件中。
    【解决方案2】:

    您确定在您的在线测试 TEN.swf 中将 type:"XML" 放在 bulkloaderadd 中吗,因为从您的 PHP 文件运行它时出现错误?

    编辑:

    从你之前的 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                                                    
    

    【讨论】:

    • 我相信是的,根据 BulkLoader 的这个 wiki:code.google.com/p/bulk-loader/wiki/AvailableOptions 我发现了这个 sn-p:bulkInstance.add("mysite.com/top-ten.php", {type:"xml"});
    • 是的,你必须把它;)问题是它真的放入你的 TEN.swf 并重新编译并在线? ==> 类型错误:错误 #1010
    • 我看到您已将 SWF 更改为 XML 类型,现在它可以工作了
    【解决方案3】:

    从你的输出:

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

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

    【讨论】:

    • 嘿,谢谢,我现在正在和 PHP 人聊天,看看我们是否可以正确生成文件。原始的 XML 文件加载没有问题,但我也被告知 mimeType 需要是 text/xml,这在 PHP 方面。
    • 它可能就像缺少一个结束标记的节点一样简单。由于文档是生成的而不是手写的,因此它可能是代码逻辑中的一个微妙之处。加载器似乎认为在根级元素之后存在无效语法。您可以尝试使用某些工具验证文档。该工具通常会在 XML 中指定语法错误,PHP 人员可以检查问题在 PHP 代码中的位置。
    • 呃,当您从 Flash 本身预览时,我们可以正常工作,但上传后仍然存在问题 :( stackoverflow.com/questions/2413266/…
    • 好吧,再看一遍,PHP开发人员说这是最接近的答案:)
    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    相关资源
    最近更新 更多