Problem mit Firefox & Prototype (Ajax.Request & Ajax.Updater)

RipmaV

Mitglied
Hi zusammen, ich hab da ein Problem mit Firefox und dem Prototype JS Framework wie es aussieht.

Ich habe ein Formular mit einem Dropdown Menü, einer Textarea und einem Button.
Das Dropdown ist zur Auswahl des Inhaltes der Textarea da und läd per Ajax.Updater den Inhalt aus der Datenbank und updatet die Textarea.
Der Button ist zum Speichern des Inhaltes, hier wird per Ajax.Request die zu speichernden Daten an eine PHP Datei gesendet die diese auch in Datenbank speichert.

Nach dem Speichern wird die Textarea nicht mehr aktualisiert wenn ich mit der Dropdownbox was anders auswähle.
Firebug zeigt zwar dass eine Änderung statt gefunden hat und auch den neuen Inhalt aber die Oberfläche zeigt dennoch den alten Inhalt.

Der IE8 macht dass alles ohne Probleme!

Ich hab folgende JavaScript-Funktionen:
Code:
function saveNewContent(server){
	var id = $('choosepage').getValue();
	var content = $('txt').getValue();
	var params = 'content='+content+'&id='+id;
	var url = server+'content/savePageContent.php';
	var myRequest = new Ajax.Request(url, {
	  method: 'post',
	  parameters: params,
	  onSuccess: showSaved(content),
	  onFailure: alert('Fehler beim Speichern des Contents')
	});
}

function showSaved(content){
	var text = 'Die Eingabe wurde erfolgreich gespeichert!';
	alert(text);
	$('txt').update(content);
}

function loadNewContent(aktion, params, server){
	if(aktion == 'newpw'){
		var url = server+'content/lostpw.php';
		var myUpdater = new Ajax.Updater({ success: 'leftbox' }, url, {
			method: 'post',
			parameters: params
	  } );
	}
	
	if(aktion == 'changeAdminContentBox'){
		var param = 'choosepage='+$('choosepage').getValue();
		var url = server+'content/changeAdminContentBox.php';
		var myUpdater = new Ajax.Updater('txt', url, {
			method: 'post',
			parameters: param,
			onComplete: function (){ $('txt').innerHTML; }
	  } );
	}
}

Und hier dass Formular dazu:
HTML:
<form method="post" action="index.php?site=adminmenu&show=content&action=update">

<select name="choosepage" id="choosepage" onchange="loadNewContent('changeAdminContentBox','','http://localhost/')">
<option value="1" >Seite - Index</option>
<option value="2" >Seite - all</option>
<option value="3" >Seite - Kategorien</option>
<option value="4" >Seite - Topgalerien</option>
<option value="5" >Seite - Galerien</option>
<option value="6" >Kategorie - Sonstige</option>
<option value="7" >Kategorie - Auto</option>
.
.
.
</select>

<textarea class="text" name="txt" id="txt" cols="90" rows="25">
Noch kein Text hinterlegt!
</textarea>

<input type="button" class="submit" onClick="saveNewContent('http://localhost/');" value="&Uuml;bernehmen!">

</form>

Ich hoffe jemand kann mir da sagen was zu tun ist damit er auch nach dem Speichern weiterhin den Inhalt auch anzeigt der ja laut Firebug korrekt geladen wird.

Gruß
Rip
 
Zuletzt bearbeitet:
Hi,

kann man das online bewundern? Ich kann nichts Verdächtiges sehen, ausser dass im onclick ein return false; fehlt, so dass das Formular zusätzlich abgesendet wird. Ist das gewollt?

LG
 
Derzeit kann man es noch nicht online sehen. Es ist ein Projekt dass ich für meine Firma mache und die entscheiden wanns online geht.

Also es ist ein normaler Button der das Formular nicht absendet wenn man drauf klickt, kein Submitbutton. Sonst würde ich dir recht geben dass da ein "return false;" fehlt.
 
Moin Rip,

da sind so einige mögliche Fehlerursachen.

z.B. scheint der FF da etwas zu cachen, Abhilfe schafft ein wechselnder Parameter in der URL.

Dann dieses:
Code:
onSuccess: showSaved(content),
	  onFailure: alert('Fehler beim Speichern des Contents')
diese beiden Anweisungen werden immer augeführt, du musst sie in einer anonymen Funktion kapseln, wie du es in loadNewContent() tust.

Noch dieses:
Code:
showSaved(content)
Das bewirkt so garnichts, damit setzt du den Wert des Textareas auf den Wert, den es schon hat.
Wenn du willst, dass dort die Antwort des Servers eingetragen wird, musst du der Funktion transport.responseText übergeben.

letztendlich: Prototype hat da seine eigene Vorgehensweise für die zu übergebenen Parameter, verwende besser diese, ich bin mir nicht sicher, ob die Daten bei deiner Variante ordentlich codiert werden.


Inkl. der genannten Änderungen würde das so aussehen, das Problem tritt damit bei mir nicht mehr auf:
Code:
<script type="text/javascript">
<!--
function saveNewContent(){
	var url = 'content/savePageContent.php?'+new Date().getTime();
	new Ajax.Request(url, {
	  method: 'post',
	  parameters: {id:$F('choosepage'),content:$F('txt')},
	  onSuccess: function(transport){showSaved(transport.responseText);},
	  onFailure: function(){alert('Fehler beim Speichern des Contents');}
	});
}

function showSaved(content){
	alert('Die Eingabe wurde erfolgreich gespeichert!');
	$('txt').update(content);
}

function loadNewContent(aktion, params){	
  if(aktion == 'newpw'){
		var url = server+'content/lostpw.php';
		var myUpdater = new Ajax.Updater({ success: 'leftbox' }, url, {
			method: 'post',
			parameters: params
	  } );
	}
	if(aktion == 'changeAdminContentBox'){
		  var url = 'content/changeAdminContentBox.php?'+new Date().getTime();
		  new Ajax.Updater('txt', url, {
			method: 'post',
			parameters: {choosepage:$F('choosepage')},
			onFailure:function(){alert('Inhalt konnte nicht geladen werden');}
	  } );
	}
}
//-->
</script>
(Die Variable Server hab ich mal herausgenommen, Anfragen an andere Server als den aktuellen funktionieren derzeit eh nicht).
 
Danke für die schnelle Hilfe, doch gebracht haben die Änderungen nichts. Die Textarea bleibt weiterhin mit dem zu letzt abgesendeten Text bestehen obwohl der FireBug was anderes sagt ändert sich nichts an der Textarea.

Zufällig noch irgendwelche Ideen die mir weiter helfen könnten?
 
Nun die Firebug Konsole zeigt an dass der Post abgesetzt worden ist. Wenn ich das Select-Feld ändere (ohne vorher gespeichert zu haben). Wenn ich dann etwas eintrage in die Textarea und auf den Button zum speichern klicke zeigt er ebenfalls an dass der Post abgesendet wurde. Die Datenbank wird auch dem entsprechend geändert. Derzeit gibts nur eine leere Rückmeldung vom PHP-Skript dass den Datenbankeintrag macht, da dort noch keine Rückmeldung implemetiert ist.
Wenn ich nun aber nach dem speichern im Select-Feld was anderes auswähle wird der Post abgesetzt, die entsprechenden Daten werden geholt und im HTML ausgetauscht aber an der Oberfläche ist nichts sichtbar von der Änderung.

Zum Verständnis habe ich auch ein paar Bildchen gemacht.

Hier ist noch alles in Ordnung beim wechsel des Inhaltes durch Veränderung des Selectfeldes:
http://img9.imageshack.us/my.php?image=bild1nqt.jpg

Speicherung der Änderungen in der Textbox (Wenn ich direkt in die DB gucke is es auch geändert):
http://img12.imageshack.us/my.php?image=bild2jae.jpg

Neue Auswahl in dem Select-Feld:
http://img10.imageshack.us/my.php?image=bild3o.jpg

http://img10.imageshack.us/my.php?image=bild4m.jpg
 
Zuletzt bearbeitet:
Hi,

kann es sein, dass die Bilder nach dem Upload drastisch verkleinert wurden? Ich weiß, dass meine Augen mittlerweile schlecht sind, aber da hätte ich selbst zu meinen besten Zeiten nichts drauf erkennen können. ;)

LG
 

Neue Beiträge

Zurück