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

时间:2022-09-16 09:48:27

Question Updated for Bounty

更新了Bounty的问题

In Flash I need to load a dynamically generated XML file, which is created using PHP.

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

I'm using the [Bulk-loader library][1] for all my loading.

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

Currently my Flash can only load a manually created XML file, what I need Flash to do is to load a PHP generated XML File like this:
--- XML path removed ---

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

When I test movie in Flash using that PHP generated XML File it will work, however the problem lies when I try to either test locally in an HTML page or online. The Flash does not render completely because of some problem obtaining data from the XML.

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


Here are some links to show where I'm at right now:

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

[FLash using manually generated XML file][2]
^ Uses: [The XML file][3]

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

[Flash using PHP generated XML file][4]
^ Uses: [The PHP generated XML File][5]

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


I searched the Bulk-loader Wiki on how to load a PHP file and for loading type information and found this: [http://code.google.com/p/bulk-loader/][6]

我在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"});


CODE Snippets

Here is my current code that loads an XML file:
'theXML' variable is obtained form the FlashVars from the HTML

这是我当前加载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();
    }



onBulkLoadComplete code

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 Embed Code:

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>



Question:

1) How to load a dynamically generated XML file that ends in .php in Flash and render the Flash correctly in an HTML

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


UPDATE

We got the Flash to read the PHP generated XML file, however we can only view working results when we 'Test Movie' from inside Flash. When we try to get it to work in an HTML page locally or online it won't render correctly.

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

3 个解决方案

#1


2  

From your output:

从你的输出:

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

It seems that the problem is not with the loader but with the PHP output. Check to make sure your output looks as expected by accessing the generated XML directly from your browser and downloading it. You may be able to spot the error in the output if you go through it in a text editor line-by-line, or you could try using an XML editor and see if it finds issues.

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

#2


0  

Are you sure you have put type:"XML" within the add of bulkloader in your online test TEN.swf, since i have an error when running it from your PHP file ?

你确定你已经在你的在线测试TEN.swf中添加了bulkloader中的类型:“XML”,因为我从你的PHP文件运行它时出错了吗?

Edit:

Reading the bytecode from your previous TEN.swf show that the xml type was not put:

从以前的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                                                    

Now it seems to work and showing the bytecode show that the xml type was added

现在它似乎工作并显示字节码显示添加了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  

try put this code in the first line of you php file:

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

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

#1


2  

From your output:

从你的输出:

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

It seems that the problem is not with the loader but with the PHP output. Check to make sure your output looks as expected by accessing the generated XML directly from your browser and downloading it. You may be able to spot the error in the output if you go through it in a text editor line-by-line, or you could try using an XML editor and see if it finds issues.

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

#2


0  

Are you sure you have put type:"XML" within the add of bulkloader in your online test TEN.swf, since i have an error when running it from your PHP file ?

你确定你已经在你的在线测试TEN.swf中添加了bulkloader中的类型:“XML”,因为我从你的PHP文件运行它时出错了吗?

Edit:

Reading the bytecode from your previous TEN.swf show that the xml type was not put:

从以前的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                                                    

Now it seems to work and showing the bytecode show that the xml type was added

现在它似乎工作并显示字节码显示添加了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  

try put this code in the first line of you php file:

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

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