J'utilise jQuery ajax pour envoyer une requête ajax vers un fichier php.
$.ajax({ url: VIP_AJAX_URL + '/add', data: 'slug=' + slug, method: 'POST', beforeSend: function () { Swal.fire({ title: '請稍候..', html: '我們正在檢查。 <br/>這個過程可能需要一些時間。', allowOutsideClick: false, didOpen: () => { Swal.showLoading() } }) }, success: function (res) { if (res !== 'success') { Swal.fire({ icon: 'error', title: 'Oops...', html: res, }) return; } console.log(res); } })
Pendant que cette requête est en cours, j'imprime à l'écran à intervalles réguliers dans un fichier php.
echo 'abc'; sleep(5); echo 'def'; sleep(5); echo 'ghi';
Mais une fois tous les processus terminés, le processus ajax est tué. Je souhaite que la valeur soit imprimée à l'écran pendant que le processus est en cours.
Par exemple, je souhaite obtenir la valeur de ? abc ? lorsque la requête est faite, ? def ? après 5 secondes et ? ghi ? après 10 secondes. Comment puis-je faire ceci? Je veux y parvenir sans utiliser de sessions, de cookies ou de bases de données.
Non, tu ne peux pas faire ?a
Vous ne pouvez le faire que sur le frontend
Vous pouvez obtenir la réponse périodiquement et l'ajouter à la vue HTML en utilisant append() pour qu'elle continue de cro?tre
function getLog() { fetch("https://gist.githubusercontent.com/prabansal/115387/raw/0e5911c791c03f2ffb9708d98cac70dd2c1bf0ba/HelloWorld.txt").then(async e=>{ let t = await e.text() document.getElementById("log").innerHTML += t+"<br/>" }) } setInterval(getLog, 1000)
<div id="log"></div>
Je l'utilise souvent pour afficher les progrès en JavaScript, comme lors de la migration artisanale de PHP sur Laravel