Dos formularios uno enviado - Enviar, retrasar, enviar

Estoy tratando de enviar dos formularios a la vez (uno va a DB y el otro a fpdf para hacer etiquetas). Yo uso jQuery para copiar las variables del primer formulario a entradas ocultas en el segundo formulario. He visto esta pregunta un par de veces aquí, pero ninguna de las respuestas ha ayudado. Utilizo el método 'fake' de ajax, es decir: establezco el objetivo del formulario en un iframe oculto en la misma página. Entonces, quiero enviar un formulario, luego usar un retraso y luego enviar el segundo formulario (¡porque no funciona sin demora!)

Entonces, ¿cómo agrego un retraso a este código?

    $('#insert').submit(function() {
    //Delay here please, or is it timeout I need?
    $('#print').submit();
    });

<form id="insert" action="insert.php" target="hiddeniframe">
// a bunch of inputs
<input type="submit" value="submit">
</form>

<form id="print" action="pdf.php" target="hiddeniframe">
// a bunch of inputs
</form>
0
@ChristianVarga Nunca antes había usado ajax, así que estaba intentando mantenerlo simple. Además, incluso si tuviera que usar ajax, creo que todavía tendría el mismo problema.
agregado el autor cantaffordretail, fuente
@ChristianVarga en realidad se requiere que el objetivo del formulario pdf sea ir al iframe. Debido a que el PDF está configurado para impresión automática y el navegador lo abre de inmediato a través del iframe y lo imprime.
agregado el autor cantaffordretail, fuente
Para ejecutar una función después de un retraso, use setTimeout de la siguiente manera: setTimeout (function() {...}, time) , donde 'time' está en milisegundos. No creo que sea eso lo que quiere hacer, ya que no puede estar seguro de cuánto tiempo llevará la respuesta. Consulte esta pregunta stackoverflow.com/questions/3064865/& hellip; (ejecutar en onload)
agregado el autor nbrooks, fuente
¿Por qué no usas ajax?
agregado el autor Christian Varga, fuente
¿Qué hace exactamente el script pdf.php? ¿Devuelve algo o crea un archivo en el servidor? No hay ninguna razón por la que no pueda enviar 2 solicitudes de ajax a la vez (aunque para ser honesto, solo debe enviar los datos una vez a una acción en el servidor, luego divida las acciones de inserción y de PDF allí).
agregado el autor Christian Varga, fuente

1 Respuestas

No está claro qué es lo que hacen o vuelven sus scripts, pero siempre puede usar ajax para la primera solicitud y luego usar el iframe para la segunda solicitud. P.ej:

$('#insert').on('submit', function(e) {
  e.preventDefault();

  $.ajax({
    url: $(this).attr('action'),
    type: 'POST',
    data: $(this).serialize(),
    success: function() {
     //duplicate fields from first form into second form
     //as per whatever code you've already written

     //submit second form
      $('#print').submit();
    })
  });
});

De esta forma, se envía el segundo formulario después de la respuesta exitosa del primer formulario.

1
agregado
Me gusta esta solución, pero no puedo hacerlo funcionar para enviar el segundo formulario. No necesito duplicar los campos porque ya está hecho en el teclado.
agregado el autor cantaffordretail, fuente
Ah solo mi falta de conocimiento. Tenía un botón de enviar para el segundo formulario y parece que el submit() no funcionará si el formulario tiene un botón de envío. Todo está bien, ¡esta solución es increíble! Gracias
agregado el autor cantaffordretail, fuente
Tira una alerta </​​code>/ console.log en la función de éxito para asegurarte de que está disparando. También revise las herramientas de firebug/desarrollador para asegurarse de que no haya errores y de que el evento realmente esté siendo enviado.
agregado el autor Christian Varga, fuente