【问题标题】:Two forms one submit - Submit, delay, submit两种形式一次提交 - 提交、延迟、提交
【发布时间】:2012-06-18 06:39:26
【问题描述】:

我正在尝试一次提交两个表单(一个去 db,另一个去 fpdf 制作标签)。我使用 jquery 将变量从第一个表单复制到第二个表单的隐藏输入。我已经看到这个问题在这里问了几次,但没有一个答案有帮助。我使用“假”ajax 方法 - 即:我将表单目标设置为同一页面上的隐藏 iframe。所以我想提交一个表单,然后使用延迟然后提交第二个表单(因为没有延迟就无法工作!)

那么如何给这段代码添加延迟:

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

【问题讨论】:

  • @ChristianVarga 我以前从未使用过 ajax,所以我尽量保持简单。此外,即使我要使用 ajax,我相信我仍然会遇到同样的问题。
  • pdf.php 脚本究竟做了什么?它会返回一些东西,还是在服务器上创建一个文件?没有理由不能一次提交 2 个 ajax 请求(尽管老实说,您应该只将数据发送一次到服务器上的一个操作,然后在那里拆分插入和 pdf 操作)。
  • @ChristianVarga 实际上要求 pdf 表单的目标是转到 iframe。因为 PDF 设置为自动打印,浏览器会立即通过 iframe 打开并打印。
  • 要在延迟后执行函数,您可以像这样使用 setTimeout:setTimeout(function(){ ... }, time),其中“时间”以毫秒为单位。不过,我认为您不是您想要做的,因为您无法确定响应需要多长时间。看到这个问题stackoverflow.com/questions/3064865/…(在onload中执行)

标签: jquery timeout


【解决方案1】:

不清楚您的脚本正在做什么/返回什么,但您始终可以将 ajax 用于第一个请求,然后将 iframe 用于第二个请求。例如:

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

这样在第一个表单响应成功后提交第二个表单。

【讨论】:

  • 我喜欢这个解决方案,但我无法提交第二个表单。我不需要复制这些字段,因为它已经在 keyup 上完成了。
  • 在成功函数中插入alert / console.log 以确保它正在触发。还要检查萤火虫/开发人员工具以确保没有错误,并且事件实际上正在发送。
  • 啊,只是我缺乏知识。我有第二个表单的提交按钮,如果表单有提交按钮,submit() 将不起作用。一切都很好,这个解决方案真棒!谢谢
猜你喜欢
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2018-01-19
相关资源
最近更新 更多