Dettmer Strutz: Gibt es in Javascript die Möglichkeit mit threads zu arbeiten?

Hallo alle zusammen,

ich bastel gerade an einen Menüaufbau über Ajax. Da kann es vorkommen, daß ich bei einen Klick parallel mir Daten über Ajax ziehen möchte. Das kommt vor, wenn der Menüpunkt ein div aktuallisieren soll und auch noch Untermenüpunkte anzeigen soll.

Ist das den Fall rufe ich gleichzeitig ein Ajaxrequest mit unterschiedlichen Parametern auf und der erste der fertig ist hat gewonnen und wird angezeigt. Das dies aber prinzipel geht sehe ich daran, daß wenn ich ein Aufruf mit einen alert langgenug unterbreche werden beide abgearbeitet.

Jetzt würde ich gerne mit threads arbeiten, damit beide vernünftig ihren Dienst machen. Gibt es da eine Möglichkeit, oderhat jemand eine andere Idee wie man das händeln kann?

Vielen Dank und schöne Grüße
Dettmer

  1. Hallo,

    Was genau ist das Problem?

    Du kannst zwei Requests (zwei XMLHttpRequest-Objekte) asynchron starten und wenn die Serverantwort da ist, wird das Dokument mit dem neuen Content gefüllt.

    Warum geht das jetzt bei dir nicht / was stört dich daran?

    Mathias

    1. Hallo,

      daß heißt aber auch, daß ich zwei Objekte programmieren muß (oder verstehe ich dich falsch?). Dies ist auch der Weg, den ich momentan gehe. Dies empfinde ich aber als ein sehr unschönen Weg.

      Das Problem bei zwei Objekten auch noch nicht so dramatisch, aber was ist, wenn ich noch mehr benötige?

      Aber Du bringst mich gerade auf die Idee den XMLHttpRequest wirklich als Objekt zu behandeln und nicht als Funktion. Man sehen ob das funzt.

      Aber trotzdem würde es mich interessieren, ob es threads gibt.

      Danke erstmal

      Dettmer

      1. Hi,

        daß heißt aber auch, daß ich zwei Objekte programmieren muß (oder verstehe ich dich falsch?).

        nein, nur instanziieren.

        Das Problem bei zwei Objekten auch noch nicht so dramatisch, aber was ist, wenn ich noch mehr benötige?

        Dann instanziierst Du noch mehr.

        Aber Du bringst mich gerade auf die Idee den XMLHttpRequest wirklich als Objekt zu behandeln und nicht als Funktion. Man sehen ob das funzt.

        Nein, das "funzt" garantiert nicht, aber es funktioniert vielleicht. Wobei es mir trotz einiger gedanklicher Anstrengung nicht gelingt mir vorzustellen, wie man XMLHttpRequest als Funktion behandeln kann - ist vermutlich eine Schutzfunktion meines Gehirns.

        Aber trotzdem würde es mich interessieren, ob es threads gibt.

        Schon bei einem simplen window.setTimeout() initiierst Du einen solchen.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Ich gebe zu, daß das mit der Funktion und dem Objekt sehr ungeschickt ausgedrückt war.

          Ich wollte damit ausdrücken, daß das ganze Prozedere ja normalerweise in 3 Funktionen abgearbeitet wir (in der natürlich ein XMLHttpRequest als Objekt angesprochen wird) und ich das Ganze in einem Objekt umwandel. Aber das ist auch garnicht der Diskusionspunkt.

          Also zurück zum eigentlichen Problem:

          Ein Timeout bringt herzlich wenig wenn ich nicht weiß wie lange die Requests dauern.

          Gruß
          Dettmer

          1. Ein Timeout bringt herzlich wenig wenn ich nicht weiß wie lange die Requests dauern.

            genau aus dem Grund existieren Eventhandler, wie z.b. onreadystatechange.

            Struppi.

        2. Hallo,

          Wobei es mir trotz einiger gedanklicher Anstrengung nicht gelingt mir vorzustellen, wie man XMLHttpRequest als Funktion behandeln kann - ist vermutlich eine Schutzfunktion meines Gehirns.

          Z.B. "new XMLHttpRequest" behandelt XMLHttpRequest als Funktion, nur Funktionen implementieren [[Construct]]. ;)

          Aber trotzdem würde es mich interessieren, ob es threads gibt.

          Schon bei einem simplen window.setTimeout() initiierst Du einen solchen.

          setTimeout stellt die Ausführung des übergebenen Codes bloß an den gegenwärtig (einzigen) laufenden Thread hintenan und führt ihn aus, sobald der zur Ruhe kommt. Threads sind nochmal was anderes, soweit ich weiß.

          Mathias

          1. Hallo,

            Aber trotzdem würde es mich interessieren, ob es threads gibt.

            Schon bei einem simplen window.setTimeout() initiierst Du einen solchen.

            setTimeout stellt die Ausführung des übergebenen Codes bloß an den gegenwärtig (einzigen) laufenden Thread hintenan und führt ihn aus, sobald der zur Ruhe kommt.

            Zur Ergänzung:
            http://ejohn.org/blog/how-javascript-timers-work/

            Mathias

      2. Hallo,

        daß heißt aber auch, daß ich zwei Objekte programmieren muß (oder verstehe ich dich falsch?). Dies ist auch der Weg, den ich momentan gehe. Dies empfinde ich aber als ein sehr unschönen Weg.

        Warum?
        Du schreibst dir eine Funktion, der du eine URL und eine Handlerfunktion übergibst. Die erzeugst dann ein XMLHttpRequest-Objekt und ruft die Handlerfunktion auf, wenn die Serverantwort eingetroffen ist.

        Das Problem bei zwei Objekten auch noch nicht so dramatisch, aber was ist, wenn ich noch mehr benötige?

        Man kann problemlos dutzende XMLHttpRequest-Objekte nacheinander instantiieren, wo ist das Problem?
        Nur wenn man wirklich viele Requests zeitkritisch absenden will, baut man sich einen begrenzten Pool an vorgefertigten XMLHttpRequest-Objekten und nutzt ein freies, wenn man eines braucht.

        Aber Du bringst mich gerade auf die Idee den XMLHttpRequest wirklich als Objekt zu behandeln und nicht als Funktion. Man sehen ob das funzt.

        Was meinst du damit?

        Aber trotzdem würde es mich interessieren, ob es threads gibt.

        Nein, deshalb meine Nachfragen.

        Mathias