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?
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.
}
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.
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?
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...') }
});
}