Dois formulários, um enviado - Enviar, atrasar, enviar

Eu estou tentando enviar dois formulários de uma só vez (um vai para o banco de dados e o outro vai para o fpdf para fazer rótulos). Eu uso o jQuery para copiar as variáveis ​​do primeiro formulário para entradas ocultas no segundo formulário. Eu já vi essa pergunta algumas vezes aqui, mas nenhuma das respostas ajudou. Eu uso o método ajax 'falso' - por exemplo: eu defino o destino do formulário para um iframe oculto na mesma página. Então, quero enviar um formulário, depois usar um atraso e enviar o segundo formulário (porque não está funcionando sem o atraso!)

Então, como eu adiciono um atraso 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
adicionado editado
Visualizações: 1
@ChristianVarga Eu nunca usei ajax antes, então eu estava tentando simplificar. Além disso, mesmo se eu fosse usar ajax, acredito que ainda teria o mesmo problema.
adicionado o autor cantaffordretail, fonte
@ChristianVarga na verdade, é necessário que o alvo do formulário em pdf seja ir para o iframe. Porque o PDF está definido para impressão automática e o navegador o abre imediatamente pelo iframe e o imprime.
adicionado o autor cantaffordretail, fonte
Para executar uma função após um atraso, você usa setTimeout desta forma: setTimeout (function() {...}, time) , onde 'time' está em milissegundos. Eu não acho que você é o que você quer fazer, já que você não pode ter certeza de quanto tempo a resposta levará. Consulte esta pergunta stackoverflow.com/questions/3064865/& hellip; (executar no onload)
adicionado o autor nbrooks, fonte
Por que você não usa apenas ajax?
adicionado o autor Christian Varga, fonte
O que exatamente o script pdf.php faz? Retorna algo ou faz um arquivo no servidor? Não há motivo para você não poder enviar 2 solicitações de ajax de uma só vez (embora, para ser honesto, você só deva enviar os dados de uma vez para uma ação no servidor, então divida a ação insert e pdf lá).
adicionado o autor Christian Varga, fonte

1 Respostas

Não está claro o que seus scripts estão fazendo/retornando, mas você sempre pode usar ajax para a primeira solicitação e usar o iframe para a segunda solicitação. Por exemplo:

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

Desta forma, o segundo formulário é submetido após a resposta bem sucedida do primeiro formulário.

1
adicionado
Eu gosto desta solução, mas não consigo trabalhar para enviar o segundo formulário. Eu não preciso duplicar os campos porque isso já é feito na chave.
adicionado o autor cantaffordretail, fonte
Ah, apenas minha falta de conhecimento. Eu tinha um botão de envio para o segundo formulário e parece que o submit() não funcionará se o formulário tiver um botão de envio. Está tudo bem, esta solução é incrível! obrigado
adicionado o autor cantaffordretail, fonte
Chuck um alerta </​​code>/ console.log na função de sucesso para se certificar de que está disparando. Verifique também as ferramentas firebug/developer para garantir que não haja erros e que o evento esteja realmente sendo enviado.
adicionado o autor Christian Varga, fonte