代码之家  ›  专栏  ›  技术社区  ›  Leon Gaban

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

  •  3
  • Leon Gaban  · 技术社区  · 15 年前

    为奖励更新问题

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

    我正在使用[批量加载程序库][1]进行所有加载。

    目前我的flash只能加载一个手工创建的xml文件,我需要flash来加载一个php生成的xml文件,如下所示:
    ---XML路径已删除---

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

    <>

    这里有一些链接显示我现在在哪里:

    [使用手动生成的XML文件进行闪存][2]
    ^使用:【XML文件】【3】

    [flash using php generated xml file][4]
    ^用途:【PHP生成的xml文件】【5】

    <>

    我搜索了批量加载程序wiki,了解如何加载PHP文件以及如何加载类型信息,发现了以下信息:[ http://code.google.com/p/bulk loader/][6]

    bulkainstance.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=阶段缩放模式。无缩放;
    stage.align=StageAlign.Top_Left;
    xml=this.loaderinfo.parameters.thexml;
    装载机=新的散装装载机(“散装”);
    loader.loglevel=bullkloader.log_信息;
    loader.addEventListener(bulkloader.complete,onBulkloadComplete);
    loader.addEventListener(Bulkloader.progress,onBulkloadProgress);
    
    /*——————————————————————————测试*/
    //以下是手动XML,在本地和联机测试时可用
    //loader.add(“client_user.xml”,id:“xmldata”));
    
    //下面使用php生成的xml,在flash中测试时有效,但在其他地方无效
    //loader.add(“---xml path removed---”,id:“xmldata”,type:“xml”,maxtries:6,preventcache:true);
    
    /*————————————————————————现场*/
    //loader.add(thexml,id:“xmldata”);
    loader.add(thexml,id:“xmldata”,type:“xml”,maxtries:6,preventcache:true);
    
    加载器.Stand();
    }
    < /代码> 
    
    



    onBulkloadComplete code

    private function onBulkLoadComplete(e:event):void
    {
    跟踪(“[Bulkloader]完成“+”\r”);
    
    global.xml=loader.getxml(“xmldata”);
    hex=global.xml.config.hex.toString(),id:“hex”
    globalWidth=global.xml.config.width.toString();
    global height=global.xml.config.height.toString();
    videoheight=(全局高度-(thumbmenuh+videoy+spacedbtn));
    controlsy=(视频高度+视频);
    
    trace(“_·_·_·_·_·_·_·_·_·_·_·_·_·_·配置_·_·_·_·_·_·_·_·_·_·_·_·_·_·_·_”);
    //跟踪(“hex=”+hex);
    //trace(“globalwidth=”+globalwidth);
    //trace(“globalheight=”+globalheight);
    //trace(“········································································································································194···········
    //跟踪(“r”);
    
    //————————————————————————————————————————XML数组
    VaR x,I;
    
    for(global.xml.tab中的x){
    对于(global.xml.tab[x].vid中的i){
    videos.push(global.xml.tab[x].vid[i].@flv);
    thumbtitles.push(global.xml.tab[x].vid[i]。@title);
    thumbpath.push(global.xml.tab[x].vid[i].@thumb);
    }
    }
    
    //——————————————————————————————————————————XML数组
    videoname=videos[0];//当前视频是第一个视频
    
    缺点接地();
    DouthVIEW();
    绘图控件();
    drawtabmenu();
    
    //——————————————————————————————查找要加载的默认图像/视频
    for(global.xml.tab中的x){
    对于(global.xml.tab[x].vid中的i){
    if(global.xml.tab[x].vid[i]。@default==“true”)。{
    //覆盖显示中的任何FLV队列
    firsttitle=global.xml.tab[x].vid[i]。@title;
    vd.flvpath=global.xml.tab[x].vid[i]。@flv;
    
    //加载默认缩略图
    加载器=新的散装加载器(“拇指”);
    loader.addEventListener(bulkloader.complete,onthumbComplete);
    loader.add(new urlrequest(global.xml.tab[x].vid[i].@thumb),id:“defaultThumbnail”);
    加载器.Stand();
    断裂;
    }
    }
    }
    }
    < /代码> 
    
    

    html嵌入代码:

    <div>
    <h2>在外部域上测试10个播放器</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“/gt;
    <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=shockwave flash“type=”application/x-shockwave-flash“width=”301“height=”353“>
    & /嵌入& gt;
    & /对象& GT;
    &L/DIV & GT;
    < /代码> 
    
    



    问题:

    1)如何在flash中加载以.php结尾的动态生成的xml文件,并在html中正确呈现flash

    <>

    < H2>更新< /H2>

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

    我正在使用[批量加载程序库][1]进行所有加载。

    目前我的flash只能加载一个手工创建的xml文件,我需要flash来加载一个php生成的xml文件,如下所示:
    ---XML路径已删除---

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


    以下是一些显示我现在在哪里的链接:


    ^用途:【XML文件】【3】


    ^用途:【PHP生成的XML文件】【5】


    我在批量加载程序wiki上搜索了如何加载PHP文件以及如何加载类型信息,发现了:[

    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文件的代码:
    塞克斯ML'变量从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();
        }
    



    散装货物完整代码

    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页面中工作时,它将无法正确呈现。

    3 回复  |  直到 13 年前
        1
  •  2
  •   David Antaramian    15 年前

    从您的输出:

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

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

        2
  •  0
  •   Patrick    15 年前

    你确定你已经 type:"XML" add 属于 bulkloader 在您的在线测试ten.swf中,因为我从您的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                                                    
    
        3
  •  0
  •   agf    13 年前

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

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