Frage zu Prototype - periodical.updater und sounds!

Andre_d

Mitglied
Hallo zusammen,

ich benutze für meinen Chat das Prototype Framework und Script Aculous.
Ich rufe mit dem Ajax.PeriodicalUpdater in Abständen die Chateinträge so aus:

Code:
var ajaxchat_intern = new Ajax.PeriodicalUpdater(
					$("chat_inserts"),
					"chat_read.php",
					{
					frequenz: 1,
					decay: 2
					}
	);

nun möchte ich Sound einbinden, wenn ein neuer Eintrag geladen wurde.

Wenn ich mich nicht irre habe ich gelesen, das der PeriodicalUpdater nur Daten neu reinlädt wenn es auch neue Daten gibt. Dann müsste ich ja auch eine Reaktion einbauen können:

- Überprüfe ob neue Daten vorhanden sind
'- Wenn es neue Daten gibt
'- spiele sound ab (embed o.ä.)

Hat da jemand eine Idee, wie man das mit einbauen könnte?

Freue mich über jede Hilfe,

viele Grüße
André
 
Wenn ich mich nicht irre habe ich gelesen, das der PeriodicalUpdater nur Daten neu reinlädt wenn es auch neue Daten gibt.

Nö, das ist nicht so....er lädt die Daten immer hinein, spielt ja eh keine Rolle, da sich nichts verändert.:-)
Was er macht, ist, wenn die Option decay gesetzt wurde, den Intervall der Requests hochzusetzen, wenn sich die Daten nicht ändern.

Du könntest ein globale Variable setzen, welche du mit der Antwort des Servers fütterst.
Ändert sich diese Variable, gibts was Neues(Prototype macht das ebenso, allerdings kommt man dort wie üblich nicht so recht ran an diese Variable ;-])
 
Hallo Sven,

hmm also ich hab nun rumprobiert, mit onComplete habe ich mir erhofft den effekt zu erzielen, was jedoch nicht geklappt hat..

Code:
function ajaxchatreloads_intern(option){
	document.chat20.nachricht.focus();
	var ajaxchat_intern = new Ajax.PeriodicalUpdater(
					$("chat_inserts"),
					"chat_read.php",
					{
					frequenz:   1,
					decay: 		2
					}
	);
test(ajaxchat_intern); 
}

function test(a)
	{
	b = a.toString();
	c = b.length;
	$("test").innerHTML = c;
	}

Hier war mein Vorhaben nun der, dass ich versucht habe die Größe/Länge der Inhalte auszulesen und wiederzugeben. Ich denke wenn es geht, das man die Länge ausgeben kann, dann jemand etwas schreibt und die Länge sich mit der, welche man vorher ausgelesen hat unterscheidet, man dann darauf z.B. mit einem Sound reagieren hätte können..

Nur damit bekomme ich eine Zahl 15 ausgegeben, wo ich nicht weis, woher die kommt.. (einträge lasse ich 30 auslesen)

Verstehe es nicht, wie man so etwas realisieren könnte..

würde mich um Denkanstöße freuen!

viele Grüße
André
 
Code:
var ajaxchat_intern = 
  new Ajax.PeriodicalUpdater(
        'chat_inserts', 
        'chat_read.php', 
        {
          method: 'get', 
          frequency: 3,
          decay:1.1,
          args:{lastText:''},
          onSuccess:function(transport)
            {
              if(transport.request.options.args.lastText!=transport.responseText)
                {
                  transport.request.options.args.lastText=transport.responseText;
                  //Hier gibt es gibt Neuigkeiten, mach was draus
                }
             }
        }
    );
 
Hallo Sven, danke Dir für deine Hilfe funktioniert soweit super!
Konnte mich leider erst jetzt melden, da ich verhindert war,

Kann es sein das es Probleme gibt mit dem IE und Prototype gibt?
Da, wenn ich den Text abschicke im, FF3.0, Opera oder SeaMonkey nach dem Upload der neue Text korrekt nachgeladen,
bzw. die Datei neugeladen wird.

Im InternetExplorer hingegen, wir anscheind der neue Inhalt nicht nachgeladen..
Jemand da einen Rat?

Hier noch einmal der JS-Code:

Code:
function sndReq() {
       resObjekt.open('get', 'chat/chat_save.php?name=' + document.chat20.name.value
	    + '&msg=' + document.chat20.nachricht.value + '&v='+Math.random(),true);
       resObjekt.onreadystatechange = handleResponse;
       resObjekt.send(null);
	if(window.document.chat20.nachricht.value == ''){
		alert("Wenn du chatten möchtest,\nmusst du auch etwas schreiben!");
		}
}

// HandleResponse Funktion
function handleResponse(){
  if(resObjekt.readyState == 4) {
		window.document.chat20.nachricht.value = '';
		window.document.getElementById("countchars").innerHTML = 'Noch 200 zeichen übrig!';
		document.chat20.nachricht.focus();
  }
}

// Laden der Chatinhalte
function ajaxchatreloads_intern(){
	document.chat20.nachricht.focus(); // nach dem laden, wird das Textfeld focusiert
	var ajaxchat_intern = new Ajax.PeriodicalUpdater($("chat_inserts"), 'chat/chat_read.php?v='+Math.random(), 
													 {
											          method: 'get', 
											          frequency: 1,
											          args:{lastText:''},
											          onSuccess:function(transport)
													            {
													              if(transport.request.options.args.lastText!=transport.responseText)
                													{
													                  transport.request.options.args.lastText=transport.responseText;
															                  $("test").innerHTML = Math.random();
													                }
													             }
											         }
												    );
}

Des weitern ist mir die Option "args" nicht geläufig, konnte auf der Prototype Seite auch nichts passendes dazu finden,
mag mir jemand diesen Punkt näher erläutern? Würde gerne verstehen was an dieser Stelle diese
Option macht! :)

Freue mich um Antwort,
viele Grüße
André
 
Moin Andre,


Was den IE betrifft, der hat eigentlich keine besonderen Probleme damit.

Zu den "args"
Dazu steht nichts in der Doku, das halt ein eigenes Objekt, welches ich dazu verwendet habe, um Eigenschaften in transport zu Speichern...der Name "args" tut also nichts zur Sache.
 
Zuletzt bearbeitet:
Hallöchen,

also was das Thema IE angeht, ich habe das Script nun auf POST laufen, da funktioniert es nun im IE auch so wie es soll. Warum er bei der GET-Methode Probleme hat, ist mir schleierhaft. Da ich die selbe Technik auf meiner Seite in einer User-Online -Anzeige nutze und da solche Probleme nicht auftauchen. :confused:

Aber ich Danke Dir vielmals für diese klasse Hilfe!

Wünsch Dir was! :)

viele liebe Grüße
André
 
Naja, was generell bei GET anzumerken ist:
Du übermittelst da die Werte aus den Eingabefeldern einfach so, wie sie sind....bei GET gehört das aber codiert, vielleicht hat sich der IE daran verschluckt.
 

Neue Beiträge

Zurück