• Hallo Besucher!

    Du bist neu im Forum? Dann registriere dich hier, um Diskussionen beizutreten oder eigene Themen zu erstellen. Für die Registrierung ist es erforderlich, dass du einen Spielaccount bei Die Stämme hast.

    Andernfalls kannst du dich hier direkt einloggen.

    Falls du dein Passwort vergessen hast, kannst du hier ein neues Passwort anfordern.

Ajax Request des Servers abwarten

DeletedUser

Gast
Heyho, es werden inzwischen ja nur noch die ersten 100 Dörfer eines Spielers auf der Spieler-Übersicht angezeigt und unten können über einen Link die restlichen Dörfer aufgerufen werden (und ich ]i]rate[/i] jetzt mal, dass das über einen AjaxRequest passiert. Verbessert mich bitte, wenn ich falsch liege)
Ich habe jetzt aber ein Script, das die Dörfer-Zeilen bearbeitet. Wie kann ich jetzt das onclick-Ereignis so verändern, dass darauf gewartet wird, dass der Request durchgeführt und geladen wurde und dann erst ein anderes Ereignis ausgelöst wird?
 

DeletedUser

Gast
Jo, oder man machts auf die harte Tour und überschreibt den Respone-Handler vom AJAX-Request :) So hab ich das im Assistent gemacht, leider schliesst man damit Chrome und Iron aus, da die vom Script aus keinen Zugriff auf das Seiten-JS zulassen, was aber nötig ist, um den Handler umzubiegen. Is aber halt die schnellste Lösung.

Bei den Player-Infos würde ich evt. auch auf den DOMNodeInserted-Event gehen, und abwarten bis die Zeilenanzahl, die man ja aus dem Tabelle-Header ermitteln kann erreicht ist...

Oder ganz banal, mittels setIntervall alle 100ms gucken ab die Tablle vollständig ist. ^^
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser

Gast
@C1B1SE: Habs jetzt über DOMNodeRemoved gemacht, weil der Link als letztes erst entfernt wird, aber irgendwie bin ich damit nicht so ganz glücklich ...

@Hypix: ... und genau deshalb würd mich die responseHandler Lösung von dir mal interessieren ;-)
Gerade, weil ich das für die Gruppen-Speicherung auch noch ganz gerne so oder ähnlich hätte.
 

DeletedUser

Gast
Die MutationEvents wären halt die "saubere" Lösung.

Ich denke Hypix hat es so ungefähr gemacht:
PHP:
var originalEventFunction = unsafeWindow.EventFuncName;
unsafeWindow.EventFuncName = function() {
  originalEventFunction();
  startMyScript();
};
 

DeletedUser

Gast
jap, hat er mir gerade auch geschrieben.
Zu unsafeWindow: reicht da nicht einfach "window"? opera zum beispiel kennt kein unsafeWindow. Ist das für Firefox erforderlich?
 

DeletedUser

Gast
Bei Opera brauchst du es nicht bzw. geht unsafeWindow nicht, weil Opera Scripts ganz anders ausführt als Greasemonkey Scripts.

Ein Greasemonkey Script kann eigentlich nicht auf die Funktionen der Website zugreifen, weil die Scripte in einer sog. Sandbox ausgeführt werden. Sandbox heißt, einige JS "Aktionen" werden nicht sofort ausgeführt, sondern von Greasemonkey geprüft (wrapping) und vermeintlich schädliche Aktionen werden blockiert.
Mit unsafeWindow sprichst du bei Greasemonkey das "richtige" window Objekt der Seite und nicht das "gewrappte" der Sandbox an.

PHP:
var win = window.opera?window:unsafeWindow;
 

DeletedUser

Gast
interessante ansätze...
Ich hab das ganze einst mit einem onclick event, verbunden mit einer wartezeit versucht um dann zu sehen, ob das neu geladene element schon da ist. wenn nicht: nochmal warten und nochmal testen. Damit bin ich auch nicht ganz zufrieden, wenn ich aber auf ein DOMSubtreeModified Event reagieren würde, hätte ich zB des Problem erst überprüfen zu müssen ob das veränderte/hinzugefügte element überhaupt das für mein skript "gesuchte" ist. zumindest das unsaubere warten wäre weg...
 

DeletedUser

Gast
Kommt halt aufs Problem an. In der Spieler-Übersicht reicht es, auf ein DOMNodeRemoved-Event zu warten, da der "Hinzufügen-Link" offensichtlich als letztes entfernt wird... Bei Gruppen-Zuweisungen kann man es zumindest im Dorf und in der Gruppen-Übersicht (kann man sonst noch irgendwo Gruppen zuweisen?) mit Hypix' Lösung hinbiegen.

Wenn wir dann dabei sind: Wartezeit läuft über setInterval(function, Interval)?
 

DeletedUser

Gast
@Samrat: wenn du genau einmal wartest wäre Timeout doch eigentlich naheliegend.
Wenn du aber in deine filterRows() noch eine Überprüfung einbaust ob auch alles da ist was du willst, wäre das intervall natürlich wd sinnvoller
 

DeletedUser

Gast
Okay, für timeout war ich auch zu blöd! :) Da die Tabelleninhalte von nem ajax-Request kommen (glaube ich), weiß ich nicht, wann der Inhalt vollständig ist... :confused:
Als ich direkt in filterRows gesprungenbin, war die Zeilenzahl direkt korrekt, aber der Filter hat völlig versagt.
 
Oben