[Ajax] Variablen in einer Funktion global machen läuft nicht...

flokli

Erfahrenes Mitglied
Hallo,
ich bin dabei, mir ein Script zu basteln, was mithilfe von einer dynamischen XML (erzeugt von PHP) den Inhalt eines Ordners anzeigt inkl. Miniaturansicht, Größe usw...
Die XML-Datei wird korrekt erstellt, all das läuft wunderbar.

Jetzt will ich die Werte in der XML-Datei auslesen (mit AJAX), als Variablen speichen (ob Objekt/Array weiß ich noch nicht genau...).
Doch ich scheitere schon an einer greundlegenden Sache, nämlich den (zugegeben hier schon oft diskutierten) globalen Variablen in Javascript (innerhalb Funktionen)...

Ich habe die Variablen ohne das Schlüsselwort var deklariert und kann sie trotzdem nicht ansprechen.

Hier die Codes (gekürzt):

XML-Datei (content.xml.php):
PHP:
<?php
header("Content-type: text/xml");
echo <<<XMLDOC
<?xml version="1.0" encoding="ISO-8859-1" ?>
	<root>
		<options>
			<name>dataview</name>
			<version>1.0</version>
			<rootpath>/</rootpath>
			<path>/dataview_xml</path>
			<byte>b</byte>
		</options>
		<items>
			<item>
				<type>folder</type>
				<ext></ext>
				<filename>Neuer Ordner</filename>
				<img>folder.png</img>
				<size>4000</size>
			</item>
			<item>
				<type>file</type>
				<ext>gif</ext>
				<filename>test.gif</filename>
				<img>test.gif</img>
				<size>200</size>
			</item>
		</items>
	</root>
XMLDOC;
?>


Javascript-Funktionen (function.js)
Code:
var http_request = false;

    function macheRequest(url) {

        http_request = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // zu dieser Zeile siehe weiter unten
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
            return false;
        }
        http_request.onreadystatechange = do_root_node;
        http_request.open('GET', url, true);
        http_request.send(null);
    }


	function do_root_node(){
		if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                xmldoc = http_request.responseXML;
				xml_root_node = xmldoc.getElementsByTagName('root').item(0);

				//Aufruf der Funktionen
				makeOptions(xml_root_node);
			}
			else {
                alert('Bei dem Request ist ein Problem aufgetreten.');
            }
        }
	}

	function makeOptions(xml_root_node) {
				//JETZT WERDEN DIE NICHT ANSPRECHBAREN VARS DEKLARIERT!

				xml_options_tmp=xml_root_node.getElementsByTagName('options').item(0);
				xml_options = new Object();
				xml_options.name    =xml_options_tmp.getElementsByTagName('name').item(0).firstChild.data;
				xml_options.version =xml_options_tmp.getElementsByTagName('version').item(0).firstChild.data;
				xml_options.rootpath=xml_options_tmp.getElementsByTagName('rootpath').item(0).firstChild.data;
				xml_options.path    =xml_options_tmp.getElementsByTagName('path').item(0).firstChild.data;
				xml_options.byte    =xml_options_tmp.getElementsByTagName('byte').item(0).firstChild.data;

				return xml_options;
    }
function macheRequest(url) startet den Request,
function do_root_node() zieht sich die Unterobjekte von <root>[..]</root> , in dieser wird die Funktion makeOptions(xml_root_node) aufgerufen, die dann eigentlich die Variablen erzeugen sollte...

Im Debugger (Firefox) steht aber, die Variable wäre undefiniert und ich kann nicht drauf zugreifen, wohl aber mit einem Alert innerhalb von makeOptions(...) ausgeben...


Was mache ich falsch?
 
Ganz normal mit z.B.

Javascript:
//so
alert(xml_options.rootpath);
//oder so
document.getElelementById('irgendwas').innerHTML=xml_options.rootpath;


Ich bekomme nur die Meldung xml_options is undefinied...
 
Zuletzt bearbeitet:
arggh... Anfängerfehler...
Ich habe vergessen, das Javascript den Code runterrattert, auch wenn er noch nicht alles fertig hat...
Mit nem <a onClick> geht es...
Danke trotzdem...
 
Jetzt läuft es!
Juhu!
HTML:
<?php echo '<?xml version="1.0" encoding="ISO-8859-1" ?>';echo "\n";?>
<html>
  <head>
    <meta http-equiv="Content-Type" content= "text/html; charset=utf-8" />
    <script type="text/javascript" src="function.js"></script>
    <link rel="stylesheet" type="text/css" href="styles.css" />
    <title>Dataview</title>
  </head>
  <body onLoad="document.getElementById('titel').innerHTML='<b>'+xml_options.name+'</b> ('+xml_options.version+')'">
  <table cellpadding="0" cellspacing="1" border="0" class="tbl-border" width="80%">
  	  <tr class="tbl-border" valign="middle">
	  	  <td align="center" id="titel">&nbsp;</td>
	  </tr>
	  <tr class="tbl2" valign="middle">
	  	  <td valign="middle">Datei|Bearbeiten|...</td>
	  </tr>
	  <tr class="tbl2" height="20">
	  	  <td>
			<table cellpadding="0" cellspacing="0" border="0" width="100%">
				<tr>
					<td>Adresse</td>
					<td width="100%"><input type="text" value="" style="width:100%;" class="inputbox" id="path"></td>
					<td nowrap="nowrap"><a href="#" class="button" style="height:20px;">Wechseln zu</a></td>
				</tr>
			</table>
		  </td>
	  </tr>
	  <tr class="tbl1" valign="middle">
	  	  <td valign="middle">Ordnerfeld</td>
	  </tr>
	  </table>
	  <script type="text/javascript">
	  <!--
	  macheRequest('content.xml.php');
	  //-->
	  </script>
  </body>
</html>
 
Zurück