Umlauf: Synchron/Asynchron - wer hat Vorrang

Hallo,

wenn ich eine AJAX- Anfrage (synchron) und eine synchronen Anfrage zur gleichen Zeit absende, wer hat dann vorrang? kann es sein, dass die synchrone Abfrage unterbrochen wird wegen der AJAX- Anfrage oder umgekehrt?
lg

  1. Hi,

    wenn ich eine AJAX- Anfrage (synchron) und eine synchronen Anfrage zur gleichen Zeit absende, ...

    das ist gar nicht möglich. Javascript arbeitet zwar ereignisgesteuert und damit scheinbar an mehreren Stellen gleichzeitig; echte Gleichzeitigkeit gibt es aber nicht. Also wird immer eine der beiden Anfragen früher sein als die andere.

    wer hat dann vorrang? kann es sein, dass die synchrone Abfrage unterbrochen wird wegen der AJAX- Anfrage oder umgekehrt?

    Nein. Die Anfrage an den Server geht in beiden Fällen sofort raus - in der Reihenfolge, wie die send-Methode aufgerufen wurde.
    Nach dem Senden der synchronen Anfrage wartet JS aber innerhalb der send-Methode, bis die Antwort da ist, während beim asynchronen Aufruf die Methode sofort zurückkehrt und die Antwort "irgendwann" eintrifft (und damit das Ereignis "onreadystatechange" auslöst, das in einer eigenen Handler-Funktion bearbeitet werden kann).

    So long,
     Martin

    --
    Ordnung schaffen heißt, das Eigelb vom Dotter zu trennen.
    1. das ist gar nicht möglich. Javascript arbeitet zwar ereignisgesteuert und damit scheinbar an mehreren Stellen gleichzeitig; echte Gleichzeitigkeit gibt es aber nicht. Also wird immer eine der beiden Anfragen früher sein als die andere.

      Genau genommen immer der synchrone Request.

      1. Hallo,

        das ist gar nicht möglich. Javascript arbeitet zwar ereignisgesteuert und damit scheinbar an mehreren Stellen gleichzeitig; echte Gleichzeitigkeit gibt es aber nicht. Also wird immer eine der beiden Anfragen früher sein als die andere.
        Genau genommen immer der synchrone Request.

        kommt drauf an, was du meinst.
        Beispiel in Pseudocode:

        DoSomething();
         SendRequest(ASYNC, ...);
         SendRequest(SYNC, ...);

        Hier wird selbstverständlich der asynchrone Request(!) zuerst gesendet, und dann erst der synchrone. Die Antworten (responses) werden aber, unabhängig davon, wann der Server sie verschickt, in umgekehrter Reihenfolge bearbeitet. Denn dieser Code würde nach dem Senden des synchronen Requests untätig auf die Antwort warten, und sich *ersst dann* um die Antwort des asynchronen Requests kümmern, die in der Zwischenzeit eingetroffen sein könnte.

        Deine Formulierung ist also nicht ganz korrekt; es müsste heißen: Die *Antwort* auf den synchronen Request wird immer zuerst bearbeitet, nicht der Request selbst.

        So long,
         Martin

        --
        You say, it cannot be love if it isn't for ever.
        But let me tell you: Sometimes, a single scene can be more to remember than the whole play.
        1. Deine Formulierung ist also nicht ganz korrekt; es müsste heißen: Die *Antwort* auf den synchronen Request wird immer zuerst bearbeitet, nicht der Request selbst.

          Ok, so gesehen stimmt das, aber dem OP ging es um die Antwort(um genau zu sein die Behandlung dieser durch Javascript) und nicht um den Request als solchen.
          Das kam meiner Meinung in deiner Antwort nur zwischen den Zeilen zum Ausdruck.

          1. Hallo,

            Deine Formulierung ist also nicht ganz korrekt; es müsste heißen: Die *Antwort* auf den synchronen Request wird immer zuerst bearbeitet, nicht der Request selbst.
            Ok, so gesehen stimmt das, aber dem OP ging es um die Antwort(um genau zu sein die Behandlung dieser durch Javascript) und nicht um den Request als solchen.

            vermutlich hast du Recht, aber das stand so deutlich nicht im Text. Deswegen hatte ich etwas weiter ausgeholt und versucht, den Ablauf zu verdeutlichen.
            Nur als du dann nachhelfen wolltest und schriebst, der synchrone *Request* werde zuerst bearbeitet, wollte ich den Unterschied zwischen Request und Response herausarbeiten; so war deine Aussage strenggenommen falsch.

            Das kam meiner Meinung in deiner Antwort nur zwischen den Zeilen zum Ausdruck.

            Richtig, die Schlussfolgerung "Synchron ist früher fertig" hatte ich nicht ausformuliert.

            Ciao,
             Martin

            --
            Irgendwann in grauer Vorzeit benutzte einer unserer prähistorischen Vorfahren ein Schimpfwort anstelle der Keule.
            Die Zivilisation hatte begonnen.