mmofacts.com

Ajax <-> Javascript Problem

gepostet vor 18 Jahre, 6 Monate von Moogly
Hallo,
habe folgendes Problem. Ich bin seit ein paar Wochen dabei, mein Spiel in ein Ajax Framework einzupassen. Ich definiere auf der Seite mehrere Divs und in den Hauptdiv lade ich die Hauptseite ein. Die ganzen Javascript Dateien mit den Funktionen lade ich beim 1 Aufruf ein.
Nun habe ich auf meiner Map verschiedene Funktionen und damit verbundene Javasript Funktionen:
- Wandern / eine Javascript Funktion verschiebt ein Bild
- Arbeiten / eine Javascript Funktion updatet die "bisher abgebaut" Anzeige
Diese Funktionen starte ich auf der Map-Seite. Nun mein Problem:
Durch das Ajax Framework laufen die Funktionen weiter und werden nicht mit jedem Seitenaufruf neu gestartet, d.h. im Klartext, es laufen z.B. beim arbeiten mehrere Anzeigen-Updates gleichzeitig. Habe es schon mittels:
  try { window.clearTimeout(aktiv2);

alert("KeinProblem!"); }
catch (e) { alert("Es gab ein Problem"); }
Er sagt zwar jedesmal es gab kein Problem, aber die Funktionen laufen weiter.
Hier noch als kleiner Schnipsel, wie ich die Funktion starte:
aktiv2=window.setTimeout("aktiv()",);

Hoffe ihr versteht mein Problem.
Gruß
Moo
gepostet vor 18 Jahre, 6 Monate von knalli
aktiv2 ist im globalen Kontext?
Weiterer Tipp: Firefox Firebug..
gepostet vor 18 Jahre, 6 Monate von Flint
Original von Moogly
Hoffe ihr versteht mein Problem.

Nicht so ganz, insbesondere was das jetzt mit Ajax zu tun hat
Kann es sein, das in deinem nachgeladen HTML/JS die varibale aktive2 neu belegt wird und damit clearTimeout auf vorher gestartete setTimeouts nicht mehr greift ?
gepostet vor 18 Jahre, 6 Monate von Moogly
Ich benutze prototype.js Framework und dort gibt es Probleme mit Javascript in dem nachgeladenen Kontent.
habe eine Stelle:
var aktiv2="";
ansonsten kommt es zu einem Fehler und er sagt: aktiv2 is not defined bei dem try Statement.
Wie kann ich das umgehen? Bzw. liegt es daran?
@Kallisti: Es kommt ja zu keinem Fehler im Syntax oder im Code.
gepostet vor 18 Jahre, 5 Monate von knalli
Original von knalli
aktiv2 ist im globalen Kontext?
Weiterer Tipp: Firefox Firebug..

Wie schauts aus?
(Ich nutze auch Protoype und lade sogar selber JS nach (damit ich nicht das HTML mit Ladehinweisen zumülle).. das funktioniert 1A.)
gepostet vor 18 Jahre, 5 Monate von Moogly
naja, der kommt scheinbar nicht damit zurecht, wenn ich das Javascript mittels PHP erstelle...d.h. Arrays etc..
Aktiv2 wird über den nachgeladenen Kontent wie oben beschrieben gestartet
Gruß
Moo
gepostet vor 18 Jahre, 5 Monate von knalli
Erstmalig? Vllt in einer Funktion? Damit nicht im globalen Bereich..
gepostet vor 18 Jahre, 5 Monate von Moogly
Ich starte es einfach mit:
aktiv2=aktiv(....);
aber leider wird das eben bei jedem mal neugestartet, wenn ich die Seite neu nachlade...
Gruß
Moo
gepostet vor 18 Jahre, 5 Monate von Moogly
Hi,
hier nochmal eine genaue Problembeschreibung:
Erstmal die Javascript Funktionen:

function DoUpdateLoop(i,max_ressi)
{
window.document.arbeit.feld.value=window.document.arbeit.feld.value*1+1;
new Ajax.Updater('cronjob', 'seite', {asynchronous:true, evalScripts:true});
if (i >= max_ressi) {
window.clearInterval(aktiv2);
new Ajax.Updater('maincontent', 'seite', {asynchronous:true, evalScripts:true}); }
}
function aktiv(i,max_ressi,abbau_zeit) {
i=i+1;
DoUpdateLoop(i,max_ressi);
window.clearTimeout(aktiv2);
aktiv2=window.setTimeout("aktiv("+i+","+max_ressi+","+abbau_zeit+")",abbau_zeit)
}
Und hier noch das Javascript, das bei der nachgeladenen Seite ausgeführt wird:

if(aktiv2=="") { } else {
try { window.clearTimeout(aktiv2); }
catch (e) { } }
aktiv2=window.setTimeout("aktiv(,,)",);
Das Try-Timeout ohne überprüfung ob aktiv2 leer ist, ergibt einen Fehler.
Hoffe ihr versteht nun mein Problem? Der nachgeladene Javascript startet einfach immerwieder die Funktion ohne die alte zu beenden.
Gruß
Moo
gepostet vor 18 Jahre, 5 Monate von knalli
Wenn das dein einziges Vorkommen von aktiv2 repräsentiert, dann ist aktiv2 eben nicht im globalen Kontext.. das versuche ich dir ja die ganze Zeit beizubringen.
Als Notlösung: var aktiv2; im globalen Kontext schreiben.
gepostet vor 18 Jahre, 5 Monate von Moogly
Werde es gleich mal testen...

Auf diese Diskussion antworten