Ich möchte Daten mit einem name
-Tag greifen, indem Sie JSON-Daten mithilfe von Ajax aufrufen. Aber jetzt funktioniert eine Funktion showCard
nicht richtig. Wie kann ich die Daten erhalten, die ein name
Tag haben? Wenn Sie auf ein img
klicken, das hat, möchte ich Daten von einer API abrufen und seinen Namen von InnerHTML anzeigen. Aber jetzt passiert nichts, wenn Sie darauf klicken. p.s. Seine ID wird in der Funktion populatePokedex
hinzugefügt. Hoffentlich macht diese Frage Sinn. Vielen Dank.So greifen Sie Daten aus Json-Daten in API
(function() {
'use strict';
window.onload = function(){
populatePokedex(); // <- This works correctly
var $foundPics = document.getElementsByClassName("found");
for(var i = 0; i < $foundPics.length; i++){
$foundPics[i].onclick = showCard;
}
};
// populate Pokedex
function populatePokedex() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://webster.cs.washington.edu/pokedex/pokedex.php?pokedex=all");
xhr.onload = function(){
if (this.status == 200) {
var picArr = this.responseText.split("\n");
for(var i=0; i < picArr.length; i++){
var eachName = picArr[i].split(":");
var spriteurl = "/Pokedex/sprites/" + eachName[1];
var imgClass = 'sprite';
if(eachName[1]==='bulbasaur.png' || eachName[1]==='charmander.png' || eachName[1]==='squirtle.png'){
imgClass += ' found';
} else {
imgClass += ' unfound';
}
document.getElementById("pokedex-view").innerHTML += "<img src=\"" + spriteurl + "\" id=\"" + eachName[0] + "\" class=\"" + imgClass + "\">";
}
} else {
document.getElementById("pokedex-view").innerHTML = "ERROR: Status: " + this.status + ", " + this.statusText;
}
};
xhr.onerror = function(){
document.getElementById("pokedex-view").innerHTML = "ERROR";
};
xhr.send();
}
// if the pokemon is found, it shows the data of the pokemon
function showCard() {
var xhr = new XMLHttpRequest();
var url = "https://webster.cs.washington.edu/pokedex/pokedex.php?pokemon=" + this.id;
xhr("GET", url);
xhr.onload = function(){
var data = JSON.parse(this.responseText);
var pokeName = document.getElementsByClassName("name");
for(var i=0; i < pokeName.length; i++){
pokeName[i].innerHTML = data.name;
}
};
xhr.onerror = function(){
alert("ERROR");
};
xhr.send();
}
})();
Ein Teil von HTML ist unten aufgeführt;
<div id="my-card">
<div class="card-container">
<div class="card">
<h2 class="name">Pokemon Name</h2>
<img src="icons/fighting.jpg" alt="weakness" class="weakness" />
</div>
</div>
</div>
<!-- You populate this using JavaScript -->
<div id="pokedex-view"></div>
, was passiert, wenn Sie erklären 'data' wie folgt aus:' var data = JSON.parse (this.responseText); '? – ochi
Ich habe versucht, aber es hat nicht funktioniert ... – Tak
irgendwelche Besonderheiten über was nicht funktioniert? ist 'showCard' Methode aufgerufen? da 'populatePokedex' eine asynchrone http-Anfrage enthält. – shakib