نموذجان يقدمان واحدًا - إرسال ، تأخير ، إرسال

أحاول تقديم شكلين في وقت واحد (واحد يذهب إلى ديسيبل والآخر يذهب إلى 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>
0
@ ChristianVarga لم يسبق لي استخدام ajax من قبل ، لذلك كنت أحاول أن يبقيه بسيط. أيضا حتى لو كنت تستخدم آجاكس أعتقد أنه لا يزال لدي نفس المشكلة.
وأضاف المؤلف cantaffordretail, مصدر
ChristianVarga في الواقع مطلوب أن يكون الهدف من نموذج pdf هو الذهاب إلى iframe. نظرًا لأن ملف PDF مضبوط على الطباعة التلقائية ويفتحه المتصفح على الفور من خلال iframe ويطبعه.
وأضاف المؤلف cantaffordretail, مصدر
لتنفيذ وظيفة بعد التأخير ، استخدم setTimeout مثل هذا: setTimeout (function() {...} ، الوقت) ، حيث يكون 'time' بالمللي ثانية. لا أعتقد أن هذا هو ما تريد القيام به ، لأنك لا تستطيع أن تتأكد من المدة التي ستستغرقها الاستجابة. راجع هذا السؤال stackoverflow.com/questions/3064865/& hellip؛ (تم التنفيذ في التحميل)
وأضاف المؤلف nbrooks, مصدر
لماذا لا تستخدم فقط ajax؟
وأضاف المؤلف Christian Varga, مصدر
ما الذي يفعله البرنامج النصي pdf.php بالضبط؟ هل يعيد شيئًا ، أو ينشئ ملفًا على الخادم؟ لا يوجد أي سبب يمنعك من إرسال طلبين لطلبات ajax دفعة واحدة (على الرغم من أنه يجب عليك إرسال البيانات مرة واحدة فقط إلى إجراء واحد على الخادم ، ثم تقسيم إجراءات إدراج وإجراء pdf هناك).
وأضاف المؤلف Christian Varga, مصدر

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

بهذه الطريقة يتم تقديم النموذج الثاني بعد الاستجابة الناجحة للنموذج الأول.

1
وأضاف
يعجبني هذا الحل ولكن لا يمكنني العمل على تقديم النموذج الثاني. ولست بحاجة إلى تكرار الحقول نظرًا لأنه يتم على لوحة المفاتيح بالفعل.
وأضاف المؤلف cantaffordretail, مصدر
آه فقط قلة معرفتي. كان لدي زر إرسال للنموذج الثاني ويبدو أن إرسال() لن يعمل إذا كان النموذج يحتوي على زر إرسال. كل شيء على ما يرام ، وهذا الحل في رائع! شكر
وأضاف المؤلف cantaffordretail, مصدر
تشاك تنبيه / console.log في وظيفة النجاح للتأكد من إطلاقها. تحقق أيضًا من أدوات firebug/developer للتأكد من عدم وجود أخطاء ، وأن الحدث يتم إرساله فعليًا.
وأضاف المؤلف Christian Varga, مصدر