Mikähän tässä on vikana kun ei lue json tiedostoa? Koodi muokattu toimivaan mallipohjaan.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Tehtävä4</title>
</head>
<body>
<div id="texthere"></div>
<!-- 1. Määritellään div, jonka sisään tulostus tehdään kohdassa 6 -->
<script>
var xmlhttp = new XMLHttpRequest();
var url = "https://api.citybik.es/v2/networks/citybikes-helsinki"; // 2. url, josta data luetaan
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var myArr = JSON.parse(xmlhttp.responseText);
myFunction(myArr); // 3. tarkistetaan, yhteys ja määritellään uusi funktio, jota kutsutaan löydetyllä datalla.
}
}
xmlhttp.open("GET", url, true); // 4. avataan url
xmlhttp.send();
function myFunction(arr) { // 5. funktio, jossa toiminnallisuus
var out = "";
var i;
for(i = 0; i < arr.length; i++) {
out += arr[i].name + " " +
arr[i].free_bikes + '<br>';
}
document.getElementById("texthere").innerHTML = out; // 6. HTML-elementti, johon tulostus tehdään
}
</script>
</body>
</html>Mun nähdäkseni se lukee json-tiedoston ihan hienosti. Rivillä 21 myArr -sisältö vastaa ihan hyvin ladattua jsonia.
Sen sijaan myFunction koodi yrittää lukea annettua objektia kuin se olisi taulukko, vaikka se ei ole.
Koodin saisi luultavasti toimimaan korvaamalla rivin 21 seuraavalla:
myFunction(myArr.network.stations); // 3. tarkistetaan, yhteys ja määritellään uusi funktio, jota kutsutaan yhdellä löydetyn datan taulukoista.
Jep, kiitos. Alkoi heti toimimaan. :)
Uusi kysymys. Muutin tuota niin, että scripti on omassa tiedostossaan sekä tieto haetaan xml-muodossa. Osaatteko sanoa miksi ei toimi?
index.html:
<html>
<head>
<meta charset="utf-8">
</head>
<body onload="myFunction();">
<div id="texthere"></div>
<script src="pyoratilanne.js"></script>
</body>
</html>pyoratilanne.js:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "https://api.digitransit.fi/routing/v1/routers/hsl/bike_rental", true); // Avaa linkki
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var myArr = xmlhttp.responseXML;
myFunction(myArr.BikeRentalStationList.stations.stations); // Määritellään uusi funktio, jota kutsutaan löydetyllä datalla.
}
}
xmlhttp.send();
function myFunction(arr) {
var out = "";
var i;
for(i = 0; i < arr.length; i++) {
out += arr[i].name + '<br>' + " Tyhjiä paikkoja: " +
arr[i].empty_slots + " Vapaita pyöriä: " +
arr[i].free_bikes + '<br>' + '<br>';
}
document.getElementById("texthere").innerHTML = out; // Teksti sivuille
}Aihe on jo aika vanha, joten et voi enää vastata siihen.