Diskuze: Proč když funkční kód na zobrazení JSON přepíšu pro jiné url a změním potřebná data, tak se mi nic nezobrazí?
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Ten JSON se pokoušíš stahovat bez toho, abys měl u nich na testování nebo zaplacený API klíč? Jejich vývojář totiž nebyl hlupák a request bez požadovaného API klíče (APP_ID) označil status kódem 403, tzn. odpověď odmítnuta. Data z odpovědi teda nemůžeš zpracovat metodou pro success (kód 200 apod.), jelikož se jedná o chybový stav. https://jsfiddle.net/9tdsneuw/
Díky za podnět, taky se učím JSON. Já bych chtěl vyexportovat tato data: https://interactive-static.scmp.com/…uscases.json?… jenže se mi ani v případě spojení nezobrazí. Jak bych to měl přepsat?
$.ajax({
"url": "https://interactive-static.scmp.com/sheet/wuhan/viruscases.json?fbclid=IwAR3s8NGc3tuU3qu2KTZazFiWsT2hYSJIBegToalp1SOEi6iZ0Bonybr3uQI",
"type": "get",
"dataType": "json"
}).done(function (data) {
$('p').text("Úspěch: " + data.entries + data.last_updated);
}).fail(function(jqXHR, status, error) {
$('p').text("Chyba: " + jqXHR.responseJSON.entries + jqXHR.responseJSON.last_updated);
});
Ty tam máš dva viditelné problémy. Jednak by bylo potřeba vyhodit z URL ten parmetr fbclid, který Ti přidal Facebook a do URL nepatří. Kvůli tomu vrací špatný status kód.
Pak máš ještě problém s tím, že poskytovatel dat nemá nastaveny CORS hlavičky, takže Ti zpracování na klientské straně budou blokovat prohlížeče, protože stránka a zdroj nejsou na shodných doménách.
CORS budeš muset obejít. Způsobů je víc, tak tady je třeba příklad pro CORS bypass na serverové straně pro PHP. Hosting musí mít povolenu direktivu allow_url_fopen.
if(($response = @file_get_contents('https://interactive-static.scmp.com/sheet/wuhan/viruscases.json')) !== false)
{
header('Access-Control-Allow-Origin: *'); // Není potřeba, pokud máš skript na stejné doméně
header('Content-type: application/json; charset=utf-8');
echo $response;
}
Pak už můžeš v klidu parsovat https://jsfiddle.net/jdmvqy6x/ (Odkaz v ukázce během víkendu zase odstraním)
Zobrazeno 4 zpráv z 4.