Asynchr. JS friert Webseite ein

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • Hallo zusammen,


    ich habe einen Temperatursensor (DHT22) auf meinem Pi und einen Apache installiert. Von meiner PHP-Seite hole ich per AJAX die Temperatur vom Sensor und stelle ihn auf der Webseite dar. Über die JS-Funktion setInterval() habe ich einen Timer laufen, der alle fünf Sekunden die Temperatur abfragt und aktualisiert.


    Leider friert bei dieser Ausführung die Webseite kurz ein, was nicht so schön ist, weil eine Uhr (JavaScript) dann für diese Zeit stehen bleibt.


    Meine Codes:


    index.php:

    Code
    [...]
    <button onclick="startContinuousDisplay();">startContinuousDisplay()</button>
    [...]
    /*
      Rest sicherlich irrelevant, weil statisch
    */


    getSensor.php:


    controller.js:



    getAsyncData.js:


    Der Code ist sicher nicht der beste, aber ich bin auch noch in der Test-Phase (keine gute Entschuldigung). Ich nehme an, irgendwo bei der Ausführung des asynchronen Codes wird die Ausführung verzögert und auf die Antwort gewartet, aber ich dachte, Nebenläufigkeit wäre mit AJAX auch gelöst.


    Ich habe auch zwei Buttons, um einmalig Temperatur und Feuchtigkeit abzulesen, da ist es nicht besser mit der Verzögerung:

    Code
    <button onclick="displayTemperature();">displayTemperature()</button>


    Habt ihr eine Idee, wie man das hier optimieren könnte?


    Vielen Dank und beste Grüße!
    Automatisch zusammengefügt:[hr]
    Ah, ok, was ich hier mache, sind synchrone AJAX Calls.


    Ich habe mir jQuery eingebunden und eine Test-Funktion geschrieben, mit der es nicht mehr hängen bleibt. Thema damit erledigt.


    Test():

    Edited once, last by Tronn ().

  • Mit AJAX ist das auch geloest. Benutzt du aber nicht. Das A steht fuer asynchron, du benutzt quasi SJAX. Denn du sagst ja explizit, dass asynchron aus sein soll:


    Code
    xmlhttp.open("GET", theRequest, false);


    Stattdessen musst du dort true uebergeben (oder nix), und dann aber natuerlich Ereigniscallbacks benutzen. Wird uebrigens alles viel einfacher, wenn man eine vernuenftige JS-Lib ala jQuery oder die dicken Brummer wie react bzw angular benutzt.