Ajax: Variablen-Rückgabe mittels prototype

Moin,

ich benutze prototype für meine Ajax-Requests.

Ich sende einen Ajax.Request ab, um damit ein PHP-Script aufzurufen, das mir einen Wert aus einer Datenbank ermittelt.
Im Ajax.Request-Objekt habe ich per onSuccess eine function aufgerufen, das klappt auch noch alles. „onSuccess: function(response) { …“
Ich kann mir dann mit response.responseText den richtigen Inhalt aus der Datenbank anzeigen lassen.

Aber wie bekomme ich den Wert nun in die Funktion, die den Ajax-Request gestartet hat? Weise ich das in der success-function einer Variable zu, ist das natürlich eine lokale Variable, die außerhalb des Ajax-Objektes nicht bekannt ist.

Also wie kriege ich den Wert aus dem Aax-Objekt extrahiert?

Danke für Eure Hilfe,
-Efchen

Nicht so viele auf einmal! ;-/

Ohne Code, wird es schwer.

Hier mal aus der Doku.

new Ajax.Request('/some\_url',
 {
 method:'get',
 onSuccess: function(transport){
 var response = transport.responseText || "no response text";
 alert("Success! \n\n" + response);
 },
 onFailure: function(){ alert('Something went wrong...') }
 });

Danke, meine Frage war:

Wie bekomme ich nun den Wert in Deiner Variablen „response“ in die aufrufende Funktion nach außerhalb des Objekts?

function fragWasAb()
{
 var ergebnis=0;

 new Ajax.Request(...siehe Deinen Quellcode...);

 ergebnis=??? // Hier soll response aus dem Request-Objekt zugewiesen werden.
}

Und nun?

Danke,
-Efchen

function getIt()
{
var response;
new Ajax.Request('/some\_url',
 {
 method:'get',
 onSuccess: function(transport){
 var response = transport.responseText;
 },
 onFailure: function(){ alert('Something went wrong...') }
 });
alert(response) //was gibt alert \>\> NULL?
}

Funktioniert das nicht?

Ich weiß das es in Jquery so funktioniert, verwende leider kein JSPrototype.

lg

Funktioniert das nicht?

Nein, das geht leider nicht.
Aber das sind ja auch zwei unterschiedliche Variablen „response“. Die eine gilt nur in der Funktion getIt, die andere nur in der Funktion, die onSuccess definiert wird.

Ich weiß das es in Jquery so funktioniert, verwende leider
kein JSPrototype.

Das kann auch da nicht funktionieren. Ich denke, das ist auch kein Problem von prototype, sondern ein Problem von OOP in JavaScript.

Wie kriege ich die lokale Variable response (in Deinem Beispiel) aus dem Ajax.Request-Objekt herausgereicht. Kann/Muss ich da noch irgendwo eine Funktion in Ajax.Request definieren, das Objekt einer Variablen zuweisen und nach dem Aufruf noch die Funktion aufrufen?

ob=new Ajax.Request(…);

und dann später noch

ob->query_response()

wobei query_response meine zu definierende Funktion ist?

Tach!

Keiner? Ist das ein Expertenforum oder was? :smile:

Wie im Thread zu lesen, könnte das Problem auch in der OOP beheimatet sein und gar nicht aus prototype resultieren.

JS-OOP-Experten?

DANKE!

Hallo Efchen,

das Problem ist nicht in der OOP beheimatet, sondern in der Asyncronitaet.
Die Funktion wartet nicht auf das Ende des Ajax-Calls.

Loesung ist einfach die gesamte Funktionalitaet in die onSuccess-Funktion zu stecken.

function getIt() {
 var response;
 new Ajax.Request('/some\_url', {
 method:'get',
 onSuccess: function(transport){
 var response = transport.responseText;
 alert(response);
 },
 onFailure: function(){ alert('Something went wrong...') }
 });
}

Stimmt!

*Schuppen fallen von den Augen*

Danke!

*lol* wo liegt jetzt der Unterschied zwischen meinen Code und dem Code von Stefan?

Die Lösung war schon zu beginn gegeben.

lg

*lol* wo liegt jetzt der Unterschied zwischen meinen Code und
dem Code von Stefan?

Der ist geringfügig.

Die Lösung war schon zu beginn gegeben.

Nein. Der entscheidende Hinweis kam von Stefan im letzten Posting:

das Problem ist nicht in der OOP beheimatet, sondern in der Asyncronitaet.
Die Funktion wartet nicht auf das Ende des Ajax-Calls.

Das hatte ich übersehen. Der Code hat mir nicht weitergeholfen, weder Deiner noch Stefans.

Das ist der Unterschied, warum ich bei Deiner Antwort noch nicht wusste, was mein Problem ist.

Alles klar? :smile:

Danke trotzdem für Deine Mühe!

Liebe Grüße,
-Efchen

Nun ist mir alles klar.
Dann konntest du den Code nicht lesen.

Zum Glück hast du jetzt eine Lösung.

lg und schönen Tag

Nun ist mir alles klar.

Schön.

Dann konntest du den Code nicht lesen.

Doch.

Zum Glück hast du jetzt eine Lösung.

Ja.