Ablauf einer Funktion, verständniss Problem
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
abschicken
antwort
attacke
bestimmte aktion
code
dank
durchlauf
ende
funktion
geschweiften klammern
gleichen anfragen
hauptproblem
menge
schleife
set
sitzen
tatsache
url
ursache
verweigern
-
Hi,
ich habe da mal eine Frage zum Ablauf einer Funktion. Ich habe ein Javascript für Greasmonkey das eine bestimmte Aktion innerhalb eines Browsergames ausführt, es läuft auch alles wie es soll, ABER ich verstehe es an einer Stelle einfach nicht.
Ich führe in einer Funktion ein alert aus, welches einfach nur anzeigt, was durch eine Schleife gelaufen ist.
function ende(){ // um diesen alert geht es, lasse ich Ihn so drin läuft alles wie gewünscht und die // Zählschleife oben wird richtig durchlaufen. // nehme ich das alert hier raus, wird beim senden die Zählschleife nicht ausgeführt alert (''+marken_einloesen+' von Set Nr. '+set+' eingelöst'); } ende(); // leitet zurück auf die Startseite und setzt damit alles auf 0 // das soll passieren wenn die for Schleife fertig durchlaufen ist window.location.href = link;
Nehme ich nun aus dieser Funktion das alert raus oder entferne die Funktion einfach aus dem Script, streikt gleich das Ganze Script und die Zählschleife wird nicht ausgeführt.
Hier mal das Stück aus dem Script um das es geht, Script selber ist etwas länger, sollte es nötig sein kann ich es aber auch vollständig posten.
// getSign ist die Funktion die am Ende auch die Ausgabe startet function getSign(){ // Prüft ob eine Menge übergeben wurde und startet bei TRUE die Schleife if (menge >= 1) { // die schleife zählt dann halt hoch bis < erreicht und spricht bei jedem durchlauf einen Link an for (var marken_einloesen = 0; marken_einloesen < menge; marken_einloesen++) { var request = new XMLHttpRequest(); request.open('get', ''+link_marken+'', true); request.send(null); } } // ende zählschleife // Schleife prüft ob gerade eine Schleife abgelaufen ist // check wird als GET übergeben beim ausführen des Scripts // wenn check nicht vorhanden ist, hat der User noch nicht auf senden geklickt if (check == 1) { // wurde check übergeben soll die funktion ende geladen und ausgeführt werden // zusätzlich soll die Seite neu geladen werden um alles wieder auf "NULL" zu setzen function ende(){ // um diesen alert geht es, lasse ich Ihn so drin läuft alles wie gewünscht und die // Zählschleife oben wird richtig durchlaufen. // nehme ich das alert hier raus, wird beim senden die Zählschleife nicht ausgeführt alert (''+marken_einloesen+' von Set Nr. '+set+' eingelöst'); } ende(); window.location.href = link; } var code = 'Hier ist die Ausgabe'; document.getElementById("provocation_area").innerHTML = code; }; // Initialisierung und Ausgabe des DIV vorbereiten getSign();
Das alert würde ich nun gern entfernen und dafür eine art "counter" oder so augeben, evtl. den Stand der Zählschleife, das man sieht wie weit der Vorgang in der Schleife schon ist.
Dazu muss ich aber erst mal verstehen warum es ohne alert nicht geht, da steh ich mal wieder auf dem Schlauch.
Danke für Eue Hilfe wie immer
Gruß Marco -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Der alert ruft mehrere Funktionen auf (z.B. Marken_einlosen). Wenn du jetzt das alert wegnimmst, dann geht logischerweise auch der Funktionsaufruf verloren. Je nach dem wie wichtig diese Funktion ist streikt dann halt das ganze Script. Du musst die Funktion also ohne alert aufrufen. Dafür dann einfach marken_einlösen() anstatt des Alerts. Das musst du natürlich auch für andere Betroffener Funktionen machen.
-
Also ich steige da nicht hinter, das alert ruft ja keine Funktion auf, sondern gibt nur Variablen aus.
Die Funktion, die die Schleife startet, wird ja außerhalb vom alert gestartet.
Die Schleife wird in der Funktion
aufgerufen und das alert in der FunktiongetSign
. Ich muss wohl an der Stelle echt zugeben dass es mir zu hoch ist. Wenn ich die Funktionende
entferne sollte doch in der FunktionEnde
trotzdem alles normal ablaufen. ( so denke ich mir das )getSign
Gibt es denn eine Möglichkeit, dem Script zu sagen, es soll doch bitte die Schleife komplett durchlaufen und dann erst den Rest ausführen? Das Hauptproblem ist ja, das die Schleife nicht vollständig durchlaufen wird. Bei kleineren Mengen ( bis 10 ) geht es noch, größere Mengen werden dann aber nicht vollständig ausgeführt.
Also das in dieser Funktion verweilt wird bis die Schleife durch ist, danach dann die
Funktion ende starten.
// getSign ist die Funktion die am Ende auch die Ausgabe startet function getSign(){ // Prüft ob eine Menge übergeben wurde und startet bei TRUE die Schleife if (menge >= 1) { // die schleife zählt dann halt hoch bis < erreicht und spricht bei jedem durchlauf einen Link an for (var marken_einloesen = 0; marken_einloesen < menge; marken_einloesen++) { var request = new XMLHttpRequest(); request.open('get', ''+link_marken+'', true); request.send(null); }
Danke wie immer und Gruß Marco
-
aff3m1tw4ff3 schrieb:
Wenn ich die Funktion
entferne sollte doch in der FunktionEnde
trotzdem alles normal ablaufen. ( so denke ich mir das )getSign
Richtig gedacht.
auch entfernt?ende();
Alle geschweiften Klammern geschlossen?
Gibt es denn eine Möglichkeit, dem Script zu sagen, es soll doch bitte die Schleife komplett durchlaufen und dann erst den Rest ausführen? Das Hauptproblem ist ja, das die Schleife nicht vollständig durchlaufen wird. Bei kleineren Mengen ( bis 10 ) geht es noch, größere Mengen werden dann aber nicht vollständig ausgeführt.
Also das in dieser Funktion verweilt wird bis die Schleife durch ist, danach dann die
Funktion ende starten.
Die Schleife wird ganz sicher zuerst durchlaufen.
Warum du zig-mal den gleichen Request abschicken möchtest, erschließt sich mir nicht.
Tatsache ist, dass der Server recht bald die Antwort verweigern wird, weil er hinter den immer gleichen Anfragen eine DoS-Attacke vermuten wird. Das ist die Ursache für dein "Mengenproblem". -
Hi,
als erstes natürlich Danke für die Antwort.
Mal kurz die Erklärung des immer gleichen Request. Durch den Request werden sogenannte
„Markensets“ verkauft. Im Normalfall würde der User da sitzen und bei zb. 500 Marekensets, 500 mal auf einlösen klicken. Diese 500
Klicks soll der Request ausführen.
Wenn ich das ausgelöste alert, eine Weile stehen lasse, wird die Schleife auch vollständig durchlaufen. Auch wenn es größere Mengen
sind. Klicke ich das alert weg wird die Schleife ebenfalls beendet und der Request nicht weiter gesendet.
timebandit schrieb:
auch entfernt?ende();
Ja habe ich entfernt
timebandit schrieb:
Alle geschweiften Klammern geschlossen?
Ja, habs nochmal geprüft, sind alle zu.
Ich werd mich da morgen noch einmal dran setzen, irgendwie muss es doch gehen.
Wünsche euch einen entspannten Sonntag
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage