You can use this function I wrote. It is in use for the graphs on my mining pool so you can see it in action at metaverse.farm. It will automatically retry every 10 seconds if it is unsuccesful.
function getJsonData(url, callback) {
let request = new XMLHttpRequest;
let timer = setTimeout(function() {
getJsonData(url, callback);
}, 10000);
request.onreadystatechange = function() {
if (request.readyState === 4 && request.status === 200) {
clearTimeout(timer);
return callback(JSON.parse(request.responseText));
}
}
request.open('GET', url);
request.send();
}
Just call it like so:
var jsonUrl = "https://api.themoviedb.org/3/movie/popular?api_key=f1d314280284e94ff7d1feeed7d44fdf&language=en-US&page=1";
var myData;
getJsonData(jsonUrl, function(data) {
myData = data;
});
And then all you need is:
console.log(myData.results[0]);
Output:
{vote_count: 7552, id: 299536, video: false, vote_average: 8.3, title: "Avengers: Infinity War", …}
You can even do:
var jsonUrl = "https://api.themoviedb.org/3/movie/popular?api_key=f1d314280284e94ff7d1feeed7d44fdf&language=en-US&page=1";
getJsonData(jsonUrl, function(data) {
data.results[0].title = "WOOOOOOOOHOOOOOOOO!";
console.log(data.results[0]);
});
Output:
{vote_count: 7552, id: 299536, video: false, vote_average: 8.3, title: "WOOOOOOOOHOOOOOOOO!", …}
If you combine it with a function like so, you have an asynchronous JSON loader which doesn't stop the browser doing other things:
var myData;
loader = $('.loader');
async function refreshData() {
loader.show();
return new Promise(function(resolve, reject) {
getJsonData(jsonUrl, function(data) {
// Once the data is loaded...
myData = data;
insertData();
loader.hide();
});
});
}