ugrás a tartalomhoz

AS3 XML betöltés PHP-n keresztül hibát ad

therest · 2011. Ápr. 13. (Sze), 00.59
Elég fura dolgokba szaladok bele a napokban, a css kínomon már segítettek a vonatkozó fórumban, most azonban valami érdekesbe akadtam ismét.

Adott egy nagyon egyszerű xml betöltő flashben. A szokásos URLLoader, és URLRequest osztályokat használva próbálom egy változóba betölteni az adatokat.

Adott a következő xml:

<?xml version="1.0" encoding="UTF-8"?>
<musicXML>
<musicData id="2" filename="nota1.mp3" />
<musicData id="1" filename="nota2.mp3" />
</musicXML>
Ezt egy php file szolgáltatja. A böngészők,a firebug, minden teljesen frankó xmlnek látja. Flashben viszont ha célváltozó típusának XML-t adok meg:
private var trackList:XML;
A következő hibaüzenetet kapom:
Error #1088: The markup in the document following the root element must be well-formed.
Ha a böngészőben kijelölöm a php script által generált lap forrását, és lementem egy "valami.xml" nevű fájlba, és ezt kérem flashen keresztül, akkor mint a kisangyal feldolgozza, pedig teljesen azonos tartalomról van szó elméletben.

Ha pedig a váltózó típusát megváltoztatom:
private var trackList:XMLList;
Akkor a php scripttel is meg a valami.xml-el is feldolgozható adatot kapok, hiba nélkül, az adatok is a helyükön vannak.

Tovább tudnék dolgozni az XMLList-es verzióval, de ez így nem a normál működés. Érti ezt valaki?
 
1

Hogyan töltöd be az adatokat?

Poetro · 2011. Ápr. 13. (Sze), 01.55
Hogyan néz ki a te kódod? Én valami ilyesmit szoktam használni:
    private var XML_PATH:String = "data.xml";
    private var _xmlLoader:URLLoader = new URLLoader();

    private function loadXML():void {
      _xmlLoader.addEventListener(Event.COMPLETE, xmlLoadComplete);
      _xmlLoader.load(new URLRequest(XML_PATH));
    }

    private function xmlLoadComplete(e:Event):void {
      var xml:XML = XML(e.target.musicXML);
      var dataItems:XMLList = xml.musicData;
      processData(dataItems);
    }
2

BOM volt. Azért továbbra is kérdés...

therest · 2011. Ápr. 13. (Sze), 12.31
Az egyik includeolt fájl elején bom volt, ez okozta a hibát. Nem először szívom meg vele. Egy nagyobb projektnél, ahol sok ember dolgozik együtt, nem feltétlenül azonos munkakörnyezetekben, ott hogyan védekeznek ez ellen?

És ha már leakad XML változóval a BOM miatt, akkor hogyan működhet XMLListtel?
3

Szabályzat

Poetro · 2011. Ápr. 13. (Sze), 12.40
Például azzal, hogy a projekt menedzser, vagy cégvezető, vagy vezető programozó, vagy akárki ír egy szabályzatot, hogy milyen kódstílust kell követni a cégben. Erre például Drupal alatt létezik a Coding Standards, ami megmondja, hogyan kell kinéznie a fájloknak. Aki ezt nem tartja be, azt lehet szankcionálni, például nem kap kávét, nem hívják meg céges ebédre, nem kap prémiumot, fizetést, kirúgják, akármi. Ebbe bele lehet foglalni, hogy fájlt sose ments BOM-mal, és nem lesz probléma. És tudtommal minden használható fejlesztői környezetet meg lehet tanítani, hogy ne mentsen BOM-ot, talán csak a Jegyzettömböt nem.
És ha már leakad XML változóval a BOM miatt, akkor hogyan működhet XMLListtel?

Mivel még mindig nem írtál kódot, nem tudható, hogy hogyan használtál és mit.
4

kód

therest · 2011. Ápr. 13. (Sze), 13.04

public class tracks extends MovieClip {
	private var loader:URLLoader;
	private var trackList:XML;

	function tracks() {
		loader = new URLLoader();	
		var req:URLRequest = new URLRequest('http://localhost/get.php');			
		var variables:URLVariables = new URLVariables();  
		variables.nocache = new Date().getTime(); 
		req.data=variables;
		loader.load(req);
		loader.addEventListener(Event.COMPLETE, processTracks);
	}
		
	function processTracks(e:Event):void {
		trackList = new XML(e.target.data);
                trace(trackList.*);
	}
}
Bom esetén XML típussal nem volt jó, de ha XMLListre cseréltem az alábbi két sorban akkor már elérhető adatokat tartalmazott.
private var trackList:XML;
trackList = new XML(e.target.data);


Biztosan notepad a ludas akkor.
Én embertől független olyan eszközre gondoltam, ami figyeli a megnyitott/mentett fájlok kódolását, és hogy van-e benne szemét. PL egy plugin dw alá, vagy valami hasonló megoldás. Mivel pl DW automatikusan felveszi a kódolást amit a fájlban lát, és külső fájlok includjánál (php-ről van szó) én pl rendszeresen elfelejtem megnézni, hogy van-e BOM (azt látom alul, hogy UTF-8, és haladok tovább). Persze lehet másoknak ez eszébe jut mindig, és csak én szívok kéthavonta fél napot emiatt. :D