JQuery - Problema con each async

 
Vista:

Problema con each async

Publicado por Ale P. (2 intervenciones) el 04/04/2020 01:25:39
Hola, desde ya les agradezco su ayuda

les cuento que estoy renegando con un trozo de codigo, resulta que ejecuto un each con jquery recorriendo las filas de una tabla
y en cada iteracion, ejecuto una llamada de AJAX en modo async=false, que hace otra cosa...

y mientras tanto, voy mostrando el estado de esta tarea, o sea, por que fila va actualizando

la cosa es que empieza el each.... y hasta que no termina no me devuelve el control... y por ende, no me muestra nada, no actualiza el estado, nada

es como que queda tildado por un rato hasta q se termina

aca les pego el codigo, ojala me puedan decir como hacer para que sea asincrono tambien el each y poder mostrar el estado de la actaulizacion de la tabla (por supuesto q hace todo... pero no se ve nada... solo se ve el resultado de la ultima instruccion, por ej, fila 100/100 o sea, me muestra que termino, ajajja)

vale aclarar que si hago async=true en el $.post() se me mandan los 100 registros a la vez... y por supuesto, obtengpo un error del servidor, por timeout...hace los primeros30, 40, y pum.. error 524

espero se entienda, gracias!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function GuardarArchivo()
{
    document.getElementById('Guardar').style.display = "none"; // oculta el boton
    document.getElementById('GuardandoSpin').style.display = "block"; // muestra un spinner
 
    // Recorre todas las filas y va insertando con ajax los productos
    $('#Tabla-FP tr').each(function()
    {
        $.ajax(
            {
                url: 'productos.php',
                global: false,
                type: 'POST',
                data:
                    {
                        campos del post
                    },
                async: false,
                success: function(data)
                 {
                    nFilasImp++;
 
                    document.getElementById('Estado').innerHTML = " "  + nFilasImp + "/" + nFilasArch; // muestra el estado del que les hablaba, que va 2 de 100 filas x ej...
                 }
            });
        }
    });
 
    document.getElementById('Guardar').style.display = "block"; // muestra de nuevo el boton
    document.getElementById('GuardandoSpin').style.display = "none"; // oculta el spinner
 
    document.getElementById('contenido-archivo').innerHTML = '<i class="fas fa-check"></i> Se ha importado en su totalidad el archivo';
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 229
Oro
Ha mantenido su posición en JQuery (en relación al último mes)
Gráfica de JQuery

Problema con each async

Publicado por joel (71 intervenciones) el 04/04/2020 10:43:38
Hola Ale, es tu código tienes un problema de cierres... te sobra un } y un );

Fíjate bien!!!

Puede ser ese el problema?
Te da algún error en la consola del navegador?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con each async

Publicado por Ale P. (2 intervenciones) el 04/04/2020 20:45:11
Hola, gracias por tu respuesta pero no, solo que lo copie y pegue, y le saque lo menos importante
en eso debo haber sacado alguna llave

el codigo funciona bien, pero solo sin son 10, o 20 filas

si son 50, se muere, proque el ultimos quedan "para el ultimo" y da timeout
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de santi
Val: 162
Plata
Ha mantenido su posición en JQuery (en relación al último mes)
Gráfica de JQuery

Problema con each async

Publicado por santi (55 intervenciones) el 12/04/2020 21:20:23
Hola,

es porque el servidor no soporta tantas llamadas en tan poco tiempo..

Puedes modificar tu server para aumentar el parámetro desde el php.ini, ej.:

upload_max_filesize = 2M
;or whatever size you want

max_execution_time = 60
; also, higher if you must - sets the maximum time in seconds

Fuente: https://stackoverflow.com/questions/3829403/how-to-increase-the-execution-timeout-in-php

O pruedes probar con "setTimeout" con jQuery para actualizar el resultado cada cierto tiempo..

Prueba a ver ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar