Estoy activando dos solicitudes de ajax al mismo tiempo. El primero tardará entre 20 y 30 segundos en completar su trabajo (es decir, guardar varios datos grandes en la tabla de diferencias, copiar imágenes, etc.)
Entonces, la segunda solicitud de ajax se activará cuando la primera comience y finalizará tan pronto como la primera complete su trabajo. El segundo se ejecutará periódicamente (en bucle recursivo hasta que el primero complete su trabajo) y mostrará el progreso al usuario final.
a continuación se muestra el código de ejemplo para replicar el comportamiento:
a.php
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> <input type="button" id="a" value = "click" /> <script> $(document).ready(function() { var i = 1; var totalCall = 10; $("#a").click(function(){ $.ajax({ url: "b.php", data: { zipcode: 97201 }, async: true, success: function( result ) { console.log(result); }, beforeSend: function () { i = 1; }, }); checkProgress(); }); function checkProgress(){ $.ajax({ url: "c.php", data: { zipcode: 97201 }, //async: true, success: function( result ) { console.log(result); i = i + 1; if (i <= totalCall) { checkProgress(); } } }); } }); </script>
b.php
<?php session_start(); sleep(2); $_SESSION["progress"] = 1; sleep(2); $_SESSION["progress"] = $_SESSION["progress"] + 1; sleep(2); $_SESSION["progress"] = $_SESSION["progress"] + 1; sleep(2); ?>
c.php
<?php session_start(); echo json_encode($_SESSION['progress']); ?>
El código anterior activa dos solicitudes ajax, pero c.php una cuelga hasta que b.php complete su trabajo. Hace su trabajo solo después de que finaliza b.php, puede verificar la captura de pantalla a continuación. Entonces, ¿cómo resolver esto?
jquery ha implementado
$.ajax(url) .progress(function(){ /* do some actions */ }) .progressUpload(function(){ /* do something on uploading */ });
¿Quizás es lo que estás buscando?