Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kuinka suorittaa useampi XMLHttpRequest kysely

Pentu [15.01.2023 15:10:04]

#

Eli tarkoitus on ajaa koodi selaimen konsoli työkalun avulla.

function loadData(url, action) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = action
  xhttp.open("GET", url);
  xhttp.setRequestHeader("X-ESA-API-Key", "ROBOT");
  xhttp.setRequestHeader("Content-Type", "application/json");
  xhttp.setRequestHeader("Accept", "application/json");

  xhttp.send();

  console.log('Vastaus:\n' + xhttp.responseText) // ei tulosta vastausta
  console.log('Metodi "loadVeikkausData" on suoritettu loppuun')
}

loadData('www.exaampleUrl.com', function() {
  if (this.readyState == 4 && this.status == 200) {
    var data = JSON.parse(this.responseText)
    console.log(data)

	// Tehdään jotain vastauksella
  }
})

// Muutama kysely lisää

// Tehdään jotain vastauksilla

console.log('Tiedosto on suoritettu loppuun')

Tästä koodista on riisuttu kaikki ylimääräinen pois, sillä muu koodi toimii haluamallani tavalla.

Ongelmani on lähinnä se, etten saa palvelimen lähettämää vastausta ulos "xhttp"-oliosta myöhempää käsittelyä varten. Useampi kysely siksi, saan edellisestä kyselystä tietoja, joita käytän jatko kyselyiden suorittamiseen.

Tarkoituksena olisi käsitellä kyselyiden vastauksena saatua dataa vasta, kun kaikki tieto on kerätty.

jlaire [15.01.2023 15:44:14]

#

XMLHttpRequest on oletuksena asynkroninen, mikä tarkoittaa, että send() ei odota HTTP-vastausta. Vastauksen saat käsiisi callback-funktiossa, kuten olet tehnytkin.

Jos haluat tehdä synkronisen HTTP-kyselyn, anna open-metodille kolmantena parametrinä false: xhttp.open("GET", url, false);.

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests­#synchronous_request

Useamman kyselyn suorittaminen onnistuu kyllä asynkronisestikin. Voit esimerkiksi tehdä seuraavan kyselyn tuolta callback-funktion sisältä.

Pentu [16.01.2023 21:15:44]

#

Tämä selittää tuon, miksei toi "xhttp.responseText" palauttanut tulosta, kiitos! Sehän oli varsin pienestä kiinni.

Periaatteessa varmasti saisi tehtyä suorittamalla uuden kyselyn aina tuon callback-funktion sisältä.

Päädyin tässä tekemään jatko kyselyt silmukassa. Tuolla ekalla kyselyllä saan toistakymmentä parametria, joilla teen uudet kyselyt.

Kolmannella kierrokella (mikäli tarvitsisin) onkin sitten jo reilusti yli puolensataa uutta parametria, joiden avulla voisi vielä hakea lisää tietoa.

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta