You are not logged in.

1

Tuesday, May 15th 2012, 8:15pm

Probleme mit Prototype

Hallo,
irgendwie verzweifel ich gerade und finde meinen Fehler nicht...Per Ajax hole ich mir über die ID den Inhalt eines Eintrags.

Javascript source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
                var entry;
		var url = 'index.php?action=WhatsUpParseEdit';
		
		new Ajax.Request(url,
				{
					method: 'get',
					parameters: {whatsUpID: whatsUpID},
					onSuccess: function(transport){
						alert(transport.responseText); // funktioniert
						entry = transport.responseText.replace(/^\s+|\s+$/g,"");
						alert(entry); // funktioniert
					},
					onFailure: function(transport){ 
						alert('Error: Ajax-Request failed.'); 
					}
		});
		alert(entry); // funktioniert nicht, gibt undefined zurück


Kann mir bitte jemand sagen, warum das 3. alert() nicht funktioniert? Ich verstehs einfach nicht..
Die entry-Variable ist oben doch definiert, aber sie funktioniert komischerweise nur in der onSuccess-function...

Danke!

Alexander Ebert

WoltLab Developer

  • "Alexander Ebert" is male

Posts: 4,738

Location: Berlin

  • Send private message

2

Tuesday, May 15th 2012, 8:20pm

Das hat nichts mit Prototype zu tun, sondern mit dem zeitlichen Ablauf. Die AJAX-Request wird an den Server gesendet und bevor die Antwort eintrifft, wird bereits das 3. alert() aufgerufen und damit ist deine Variable immer noch "undefined", AJAX steht eben für "asynchron" ;) Zur kleinen Erläuterung:
  1. entry wird definiert
  2. AJAX-Request wird gesendet
  3. 3. alert() wird ausgeführt
  4. Antwort vom Server ist da, onSuccess() wird ausgeführt
Alexander Ebert
Developer WoltLab® GmbH


3

Tuesday, May 15th 2012, 8:23pm

Also muss mein restlicher Code, wenn ich mit der Variable entry weiterarbeiten will, in der onSuccess-Funktion ablaufen?

4

Tuesday, May 15th 2012, 8:28pm

Entweder in der onSuccess-Funktion oder in jeder Funktion welche in onSuccess erzeugt oder aufgerufen wird.

Alexander Ebert

WoltLab Developer

  • "Alexander Ebert" is male

Posts: 4,738

Location: Berlin

  • Send private message

6

Tuesday, May 15th 2012, 8:29pm

Ja, alternativ kannst du die Verarbeitung auch in eine weitere Funktion stecken und diese innerhalb von onSuccess() übergeben, idealerweise direkt als Parameter (das ist sauberer als mit globalen Variablen zu arbeiten). Da allerdings eine Funktion genauso gut ist wie eine andere, spricht nichts gegen die Verarbeitung direkt in onSuccess().
Alexander Ebert
Developer WoltLab® GmbH