Как загрузить PHP динамически сгенерированный XML во FLASH - PullRequest
3 голосов
/ 06 марта 2010

Вопрос обновлен для Bounty

Во Flash мне нужно загрузить динамически сгенерированный файл XML, созданный с помощью PHP.

Я использую [Bulk-loader library] [1] для всей моей загрузки.

В настоящее время мой Flash может загружать только XML-файл, созданный вручную, для этого мне нужно, чтобы Flash загружал XML-файл, сгенерированный PHP, например так:--- Путь XML удален ---

Когда я тестирую фильм во Flash с использованием этого XML-файла, сгенерированного PHP, он будет работать, однако проблема заключается в том, что я пытаюсь выполнить локальное тестирование на странице HTML или в Интернете.Flash не отображается полностью из-за проблем с получением данных из XML.

Вот несколько ссылок, чтобы показать, где я сейчас нахожусь:

[FLASH с использованием сгенерированного вручную XML-файла] [2]^ Использует: [XML-файл] [3]

[Flash с использованием сгенерированного PHP файла XML] [4]^ Использует: [PHP сгенерированный XML-файл] [5]

Я искал вики Bulk-Loader о том, как загрузить файл 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 ' получается из FlashVars из HTML

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) Как загрузить динамически сгенерированный XML-файл, заканчивающийся на .php во Flash, и правильно отобразить Flash в HTML

ОБНОВЛЕНИЕ

Мы получили Flash для чтения сгенерированного PHP-файла XML, однако мы можем просматривать рабочие результаты только тогда, когда мы тестируем фильм изнутри Flash.Когда мы пытаемся заставить его работать на HTML-странице локально или онлайн, он не будет правильно отображаться.

Ответы [ 3 ]

2 голосов
/ 06 марта 2010

Из вашего вывода:

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

Кажется, проблема не в загрузчике, а в выводе PHP. Убедитесь, что ваш вывод выглядит так, как ожидалось, открыв сгенерированный XML прямо из браузера и загрузив его. Вы можете обнаружить ошибку в выходных данных, если построчно просмотреть ее в текстовом редакторе или попытаться использовать редактор XML и посмотреть, не обнаружит ли она проблемы.

0 голосов
/ 10 марта 2010

Вы уверены, что поместили type:"XML" в add из bulkloader в своем онлайн-тесте TEN.swf, поскольку у меня возникла ошибка при запуске его из файла PHP?

Edit:

Чтение байт-кода из вашего предыдущего 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                                                    
0 голосов
/ 06 марта 2010

попробуйте поместить этот код в первую строку вашего php-файла:

header ("content-type: text/xml");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...