Für ein Schulhistorie-Projekt mache ich eine Timeline-Webseite (live here). Um zu vermeiden, dass die Details für jeden wiederholt eingegeben werden müssen, lege ich sie in eine Tabelle und exportiere sie als JSON.Wie erzwinge synchrone Ausführung von getJSON?
Im Nav habe ich Links mit dem Jahr des Ereignisses mit Javascript erstellt.
Ich möchte dann slick.js, ein jQuery-Plugin, verwenden, um das Nav in ein Karussell zu verwandeln, wie die /links-test-static.html der oben verlinkten Live-Website demonstriert.
Mein Code:
$(document).ready(function(){
$.getJSON("data.js", function(result){
for (var i = 0; i < result.length; i++){
var string = JSON.stringify(result[i]);
var parsed = JSON.parse(string);
$('.slider').append("<li><a href=\"#" + parsed.number + "\">" + parsed.year + "</a></li>");
}
});
$('.slider').slick({
slidesToShow: 8,
slidesToScroll: 5,
autoplay: true,
autoplaySpeed: 3000
});
});
Die Links werden erstellt, aber der Schieber nicht. Ich habe eine Seite, wo die Links erstellt werden nicht mit JSON, und es hat gut funktioniert.
Ich denke, das Problem liegt daran, dass die Methode getJSON asynchron ist, also versucht der Browser den Slider zu erstellen, bevor irgendwelche Elemente dem Slider hinzugefügt werden. Erstens, ist dies das Problem? Wenn ja, wie kann man das am besten beheben?
Sie können‘ t tu das. Sie sollten Versprechungen verwenden. – SLaks
Anstatt zu versuchen, die Benutzeroberfläche zu blockieren, versuchen Sie, asynchron nach dem Herunterladen des JSON Slick aufzurufen. Einfach seinen Aufruf in den Rückruf nach dieser Schleife einfügen. – Bergi
@Bergi Das hat funktioniert, danke! Aus irgendeinem Grund übersah ich die Tatsache, dass ich das tun könnte. –