Zwei Formulare eins einreichen - Einreichen, Verspätung, Einreichen

Ich versuche, zwei Formulare gleichzeitig einzureichen (eins geht an db und das andere geht an fpdf, um Etiketten zu machen). Ich benutze jquery, um die Variablen von der ersten Form in versteckte Eingaben auf der zweiten Form zu kopieren. Ich habe diese Frage ein paar Mal hier gesehen, aber keine der Antworten hat geholfen. Ich benutze die "falsche" Ajax-Methode - dh: Ich setze das Formularziel auf einen versteckten Iframe auf derselben Seite. Ich möchte also ein Formular einreichen, dann eine Verzögerung verwenden und dann das zweite Formular einreichen (weil es ohne die Verzögerung nicht funktioniert!)

Also, wie füge ich eine Verzögerung zu diesem Code hinzu:

    $('#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
hinzugefügt bearbeitet
Ansichten: 1
@ChristianVarga Ich habe noch nie Ajax benutzt, also habe ich versucht, es einfach zu halten. Auch wenn ich Ajax benutzen würde, glaube ich, dass ich immer noch das gleiche Problem habe.
hinzugefügt der Autor cantaffordretail, Quelle
@ChristianVarga ist es eigentlich erforderlich, das Ziel des PDF-Formulars zu haben, um zum iframe zu gelangen. Da die PDF-Datei auf automatischen Druck eingestellt ist, wird sie vom Browser sofort über den Iframe geöffnet und gedruckt.
hinzugefügt der Autor cantaffordretail, Quelle
Um eine Funktion nach einer Verzögerung auszuführen, verwenden Sie setTimeout wie folgt: setTimeout (function() {...}, time) , wobei 'time' in Millisekunden angegeben ist. Ich glaube nicht, dass Sie das wollen, aber Sie können nicht sicher sein, wie lange die Antwort dauern wird. Siehe diese Frage stackoverflow.com/questions/3064865/& hellip; (in onload ausführen)
hinzugefügt der Autor nbrooks, Quelle
Warum benutzt du nicht einfach Ajax?
hinzugefügt der Autor Christian Varga, Quelle
Was genau macht das pdf.php Skript? Gibt es etwas zurück oder erstellt eine Datei auf dem Server? Es gibt keinen Grund, warum Sie nicht gleich 2 Ajax-Anfragen einreichen können (obwohl Sie ehrlich gesagt die Daten nur einmal an eine Aktion auf dem Server senden sollten, dann teilen Sie die Einfüge- und die PDF-Aktion dort auf).
hinzugefügt der Autor Christian Varga, Quelle

1 Antworten

Es ist nicht klar, was Ihre Skripte tun/zurückgeben, aber Sie können immer ajax für die erste Anfrage verwenden und dann den iframe für die zweite Anfrage verwenden. Z.B:

$('#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();
    })
  });
});

Auf diese Weise wird das zweite Formular nach der erfolgreichen Antwort des ersten Formulars gesendet.

1
hinzugefügt
Ich mag diese Lösung, aber ich kann es nicht schaffen, das zweite Formular einzureichen. Ich muss die Felder nicht duplizieren, da dies bereits auf keyup erfolgt ist.
hinzugefügt der Autor cantaffordretail, Quelle
Ach, nur mein Mangel an Wissen. Ich hatte einen Absenden-Button für das zweite Formular und es scheint, dass die submit() nicht funktioniert, wenn das Formular einen Absenden-Button hat. Alles ist gut, diese Lösung ist großartig! Vielen Dank
hinzugefügt der Autor cantaffordretail, Quelle
Chuck ein alert / console.log in der Erfolgsfunktion, um sicherzustellen, dass es feuert. Überprüfen Sie auch die Firebug/Entwickler-Tools, um sicherzustellen, dass keine Fehler vorliegen und dass das Ereignis tatsächlich gesendet wird.
hinzugefügt der Autor Christian Varga, Quelle