J'essaie de faire une demande à une route qui fait une requête à une API et si l'API a les données, la réponse est de rendre un autre site web avec les données de l'API. Mais si les données ne sont pas encore prêtes, puisqu'elles sont encore en cours de traitement, la route renvoie une chaîne "not finished yet".
Ce que je souhaite faire est : faire une requête get et si la réponse est "not finished yet" attendre 5 secondes et refaire la requête jusqu'à ce que la réponse soit la donnée. Après cela, le script ouvrirait la fenêtre avec la nouvelle page contenant les données chargées.
Voici ce que j'ai déjà fait :
job_id = document.querySelector("#job_id").getAttribute("value")
code = document.querySelector("#code").getAttribute("value")
var myRequest = new XMLHttpRequest();
myRequest.open('GET', `http://127.0.0.1:5000/status/${job_id}/${code}`);
myRequest.onreadystatechange = function () {
if (myRequest.readyState === 4 && myRequest.responseText != 'not finished yet') {
window.location = `http://127.0.0.1:5000/status/${job_id}/${code}`
}
};
Si quelqu'un sait si cela fonctionne ou s'il connaît un meilleur moyen d'y remédier, j'apprécierais votre aide.
Merci d'avance.
Solution :
Après quelques heures, j'ai enfin trouvé une solution. Je ne sais toujours pas si c'est la meilleure solution.
function search() {
job_id = document.querySelector("#job_id").getAttribute("value")
code = document.querySelector("#code").getAttribute("value")
var myRequest = new XMLHttpRequest();
myRequest.open('GET', `http://127.0.0.1:5000/status/${job_id}/${code}`);
myRequest.send();
myRequest.onreadystatechange = function () {
if (myRequest.readyState === 4 && myRequest.responseText === 'not finished yet') { setTimeout(function () {search();}, 5000)
}
else if(myRequest.readyState === 4 && myRequest.responseText != 'not finished yet')
{ window.location = `http://127.0.0.1:5000/status/${job_id}/${code}`}}
}
search()