Trädvy Permalänk
Medlem
Plats
kolbäck
Registrerad
Feb 2011

fråga om XMLHttpRequest

har en fundering på hur denna korden funkar

function minehemta() { nocache = "&nocache=" + Math.random() * 10000; var request = new XMLHttpRequest(); request.onreadystatechange = function() { if (this.readyState == 4) { if (this.status == 200) { if (this.responseXML != null) { document.getElementById("ruta_minetal").innerHTML = this.responseXML.getElementsByTagName('minetal')[0].childNodes[0].nodeValue; } } } } // send HTTP GET request.open("GET", "minehemta" + strLED1 + nocache, true); request.send(null); strLED1 = ""; }

på något sätt är det baklängse man uppdatera värdena först på hemsidan och sen fråga man om nya värden server. stämmer det?
Jag hur håller den reda på vilket svar den får till backa?

Trädvy Permalänk
Medlem
Plats
Arboga
Registrerad
Jan 2002

I request.onreadystatechange sätter du en funktion som körs när requesten görs med request.send (grovt beskrivet).

Skickades från m.sweclockers.com

Intel Core i7 6700K | Gigabyte Z170X-UD3 | Corsair Vengeance LPX 16GB DDR4 2400Mhz | EVGA GTX 980Ti Hybrid | Samsung 950 PRO 256GB | Noctua NH-D15 | EVGA G2 750 | Fractal Design Define R5

Trädvy Permalänk
Medlem
Plats
kolbäck
Registrerad
Feb 2011

så mycket har jag förstått den uppdatera värdet när den ändras och den verka som den skickar först och sen skriver ut värdet men som korden skriver är det tvärt i mot vad som händer eller inte händer.
om man nu skulle vilja uppdatera olika värden beroende på vad användare gör på websidan
t.ex.
om man vill uppdatera värde A i första gången när man fråga och sen tycker användaren på en knapp som gör värde B behöver uppdateras då fråga efter B kommer den då att visa värdet för B eller visa den värdet för A då vet jag att den skriver inte A värdet där B värdet ska vara utan B kommer där B ska vara men kommer värdet att ändras när man trycker på knappen

Jag hamnat i problemet att jag behöver uppdatera så mycket på websidan om jag tar med alla värdena när jag fråga. Så vill dela upp det beroende på vad användaren gör för att inte arduino ska sluta funka för det är nämligen servern
går det att göra eller inte?

Trädvy Permalänk
Medlem
Registrerad
Aug 2013

@jost1: Jag har svårt att förstå vad du menar när du knappt använder punkt. Det är väldigt långa meningar med referenser till A och B, så jag tappar bort mig på vägen.

Eventet onreadystatechange triggas fem gånger (readyState 0-4):

0: request not initialized
1: server connection established
2: request received
3: processing request
4: request finished and response is ready

När readyState är 4 och status är 200 så är responsen färdig. Så det är i det sammanhanget du landar när funktionen anropas. Om du upplever att saker inte beter sig som förväntat skulle du kunna dubbelkolla HTTP-statuskoden så att den inte är något annat än et värde inom 200-spannet.

Trädvy Permalänk
Medlem
Plats
Finland
Registrerad
Maj 2004

Som @Zajin försökte förklara för dig, så körs inte den här koden genast

request.onreadystatechange = function() { }

Utan den är en så kallad "callback", någonting som anropas av

request.send()

då den är färdig (och några gånger före det som @Sebbepojken påpekar). Det att du definierar en funktion gör inte att den körs.

Du kan tänka dej att koden för request.send() är något i den här stilen

function send() { < gör en anslutning > this.readystate = 1; this.onreadystatechange(); // <-- Här anropas den funktion du lagrat < gör något annat > this.readystate = 2; this.onreadystatechange(); // <-- Här anropas din funktion för andra gången < osv. > }