[Prototype] Updater erst beim zweiten Klick
bimmel
- programmiertechnik
Hallo Forum,
ich arbeite gerade an einer Art "Warenkorb" für mein Projekt (das Projekt ist kein Online-Shop).
Um aus diesem "Warenkorb"(=Session-Array) einen Eintrag herauszulöschen, gebe ich dem Benutzer die Möglichkeit, neben jedem Eintrag einen "Minus"-Button zu klicken. Dieser ruft über JavaScript einen Ajax.Request auf:
new Ajax.Request
(
'editdel_minus.php',
{
method: 'get',
onSuccess: refresh_footer(),
parameters:
{
array: a,
elem: i
}
}
);
Der Request läuft erfolgreich durch, und die Funktion refresh_footer wird ausgeführt:
new Ajax.Updater
(
'footer_line',
'ajax_editdel.php',
{
method: 'get',
parameters:
{
update: true
},
onSuccess: function(o) { if(o.responseText=="false") $('footer_line').style.display="none"; }
}
);
Diese sollte den footer, in dem die Anzeige des Warenkorbs erfolgt, aktualisieren.
ajax_editdel.php wird definitiv aufgerufen und erledigt seinen Job ordnungsgemäß. Nur wird die Ausgabe nicht aktualisiert. Dazu muss ich erst ein zweites Mal auf den Minus-Button klicken.
Dass es nicht an ajax_editdel.php liegen kann, habe ich herausgefunden, indem ich nur 1x auf den Minus-Button klickte (hier passiert noch nichts), und dann die Seite aktualisiere - und da sehe ich, dass das Element schon herausgelöscht wurde. Es liegt also definitiv am Refresh.
Hat jemand eine Idee an was das liegen könnte?
Kleine Anmerkung: das onSuccess ist belanglos, das sorgt nur dafür, dass der footer ausgeblendet wird, wenn sich kein Eintrag mehr im Warenkorb (=Session-Array) befindet.
Liebe Grüße
bimmel
Um aus diesem "Warenkorb"(=Session-Array) einen Eintrag herauszulöschen, gebe ich dem Benutzer die Möglichkeit, neben jedem Eintrag einen "Minus"-Button zu klicken. Dieser ruft über JavaScript einen Ajax.Request auf:
new Ajax.Request
(
'editdel_minus.php',
{
method: 'get',
onSuccess: refresh_footer(),
parameters:
{
array: a,
elem: i
}
}
);
Du weißt was für Werte Eventhandler benötigen?
<http://www.prototypejs.org/api/ajax/request>
Du brauchst hier eine Funktionsreferenz, du rufst in deinem Code aber die Funktion direkt auf und weist dem Eventhandler den rückgabewert, der Funktion refresh\_footer() zu (vermutlich undefined).
Struppi.
Hi
Du brauchst hier eine Funktionsreferenz,
Diese Zeile habe ich nun:
onSuccess: function(v) { refresh_footer(); },
und plötzlich funktioniert das wunderbar. Das ist toll. Danke für diese Lösung.
Aber wieso sollte man hier keine Funktion direkt aufrufen dürfen?
Lg
bimmel
Diese Zeile habe ich nun:
onSuccess: function(v) { refresh_footer(); },
und plötzlich funktioniert das wunderbar. Das ist toll. Danke für diese Lösung.
Aber wieso sollte man hier keine Funktion direkt aufrufen dürfen?
Naja, der handler heißt onSuccess, er soll also aufgerufen werden, wenn etwas erfolgreich war und nicht in dem Moment wo du den Kontruktor aufrufst.
Struppi.
Mahlzeit bimmel,
Diese Zeile habe ich nun:
onSuccess: function(v) { refresh_footer(); },
und plötzlich funktioniert das wunderbar. Das ist toll. Danke für diese Lösung.
Das sieht aber eher wie eine Von-hinten-durch-die-Brust-ins-Auge-"Lösung" aus ... warum so kompliziert?
onSuccess: refresh_footer,
Du darfst schon gern die Funktionsreferenz direkt dort angeben - nur eben nicht die Funktion direkt *ausführen*.
MfG,
EKKi