Ajax Request Problem

Hi, ich habe ein kleines Problem mit Ajax. Ich hab mir da aus einer Vorlage das wichtigste kopiert und dann selbst noch herumgedoktort, nur da hab ich jetzt ein Problem…

Also…
Es geht um eine Karte in einem Browsergame, wobei man dann bei einem Formular X & Y Koordinaten eingeben kann, und dann aus der Datenbank Informationen geholt werden sollen. Die XML-Antwort funktioniert und gibt auch das richtige aus. Nur mit dem Javascript hakts etwas.

Hier der Ausschnitt aus dem Formular

 <tr><th>Startkoordinaten</th><td>X: <input type="text" name="start_x" maxlength="4" onchange="start_tile()" /></td><td>Y: <input type="text" name="start_y" maxlength="4" onchange="start_tile()" /></td></tr>

Hier wird das Ergebnis dann eingefügt…

<div id="start_tile"></div>

Hier die Funktion start_tile(), die im Quelltext definiert ist…

[code][/code]

Von der Karte her sieht das jetzt so aus, dass nur das Feld 49/50 besetzt ist. Wenn ich jetzt bewusst falsche Koordinaten nehme, in diesem Fall 48/50, bricht das Script aufgrund eines Fehlers ab:
[attachment=2]script_fail_1.jpg[/attachment]

Verwende ich danach die richtigen Koordinaten, 49/50, erhalte ich prompt dierichtge Antwort via XML, das Scrpt bricht jedoch wieder aufgrund eines Fehlers ab:
[attachment=1]script_fail_2.jpg[/attachment]

Und jetzt kommts: wenn ich jetzt wieder Falsche Koordinaten eingebe, kommt kein Fehler und der Link wird richtig eingefügt…
[attachment=0]script_fail_3.jpg[/attachment]

Ich bin die halbe Nacht dran gesessen, aber leider nicht weitergekommen. Ich hoffe irgendjemand kann mir helfen. Wenn sich derjenige das direkt anschauen müsste/will, müsste ich einen Account erstellen, wäre aber kein Problem…

Mfg :wink2:

gibts das irgendwo live?

[code] // Request auswerten
function interpretRequest() {
switch (request.readyState) {
// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
case 4:
if (request.status != 200) {
alert(“Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:”+request.status);
} else {

           response = request.responseXML;
  
           return response; // <----
        }
        break;
     default:
        break;
  }

}[/code]
solltest du nicht auch etwas zurückgeben?

Ist ein Rückgabewert zwingend? Ansonsten müsste response ja eine globale Variable sein, und daher verfügbar, was ja auch im dritten Beispiel funktioniert…

Ich blicke da jedenfalls nich mehr durch und kenne mich mit Javascript kaum aus, ich hab das jetzt so gelöst:

[code]function start_tile(){

            var request = false;

                   function setRequest(url) {

	                if (window.XMLHttpRequest) {
	          	request = new XMLHttpRequest();
	              } else if (window.ActiveXObject) {
		               try {
		               	request = new ActiveXObject(\'Msxml2.XMLHTTP\'); 
	              	} catch (e) {
			          try {
				         request = new ActiveXObject(\'Microsoft.XMLHTTP\'); 
			          } catch (e) {}
		           }
	              }

	              if (!request) {
		             alert("Fehler: Kann keine XMLHTTP-Instanz erzeugen");
		             return false;
	              } else {
	
	 

		             request.open(\'post\', url, true);

		             request.setRequestHeader(\'Content-Type\', \'application/x-www-form-urlencoded\');

		             request.send();

		             request.onreadystatechange = interpretRequest;
	              }
             }

             // Request auswerten
             function interpretRequest() {
	              switch (request.readyState) {
		             // wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
		             case 4:
			              if (request.status != 200) {
				             alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
			              } else {

				             xmlDoc = request.responseXML;
				
				               var return_html = \'Startpunkt: <a href="?t=tile_profile&id=\' + xmlDoc.getElementsByTagName(\'tile_id\')[0].firstChild.nodeValue + \'">\' + xmlDoc.getElementsByTagName(\'tile_name\')[0].firstChild.nodeValue + \' [\' + xmlDoc.getElementsByTagName(\'tile_posx\')[0].firstChild.nodeValue + \'|\' + xmlDoc.getElementsByTagName(\'tile_posy\')[0].firstChild.nodeValue + \']</a>\';
         
                     document.getElementById(\'start_tile\').innerHTML = return_html;
	

			            }
			              break;  
		             default:
		               	break;
	              }
             }

  
         
         if(document.getElementsByName("start_x")[0].value != 0 && document.getElementsByName("start_y")[0].value != 0){
         
         
         setRequest("?t=journey_start_tile&start_x=" + document.getElementsByName("start_x")[0].value + "&start_y=" + document.getElementsByName("start_y")[0].value);
         
         
          
         }
         

         
         }</script>[/code]

Also die Funktionen in einer Funktion. Der Nachteil: Ich muss die Request-Funktionen öfters notieren, weil später mehrere Datensätze abgefragt werden sollen…
Danke trotzdem, ich hatte vergessen meine Lösung noch schnell zu posten.

Mfg :wink2: