2012-03-19 14 views
10

मैं किसी होस्ट के लिए एक होस्ट फॉर्म बना रहा हूं जिसके लिए वे होस्ट कर रहे हैं। मूल उपयोगकर्ता विवरण किसी तृतीय-पक्ष सिस्टम (यानी नाम, ईमेल इत्यादि) को सबमिट किए जाते हैं लेकिन शेष फ़ील्ड को ग्राहक को ईमेल के माध्यम से भेजा जाना आवश्यक है।jquery: फॉर्म को दो बार सबमिट करना

  1. सूची आइटम
  2. उपयोगकर्ता
  3. jQuery bvalidator आवश्यक फ़ील्ड
  4. प्रपत्र एक करने के लिए (ajax के माध्यम से) प्रस्तुत की है के लिए प्रपत्र की जाँच करता है फ़ॉर्म भरता है:

    मैं तो होना ही कुछ इस तरह की जरूरत है अलग पृष्ठ जहां ग्राहक को ईमेल

  5. फ़ॉर्म को भेजा जाता है, फिर तीसरे पक्ष के सिस्टम
  6. पर फ़ॉर्म (नियमित पोस्ट विधि) सबमिट किया जाता है सफलता उपयोगकर्ता को 'धन्यवाद' यूआरएल पर वापस भेज दिया जाता है।

यहां कोड है जिसका मैंने उपयोग करने का प्रयास किया है, लेकिन यह एक लूप में बार-बार 'ईमेल' पृष्ठ पर सबमिट हो जाता है, और बाहरी यूआरएल को कभी सबमिट नहीं करता है।

यदि मैं $('#form1').submit(); को अलर्ट के साथ प्रतिस्थापित करता हूं तो यह ईमेल पृष्ठ पर केवल एक बार सबमिट करता है और फिर सही ढंग से अलर्ट प्रदर्शित करता है।

var myvalidator = $('#form1').bValidator(optionsGrey); 

$('#form1').submit(function() { 
    if (myvalidator.isValid()) { 

    $.ajax({ 
     data: $('#form1').serialize(), 
     type: "POST", 
     url: "email_send.asp", 
     success: function() { 
     $('#form1').submit(); 
     } 
    }); 
    } 
    return false; 
}); 

कोई सुझाव है कि मैं इसे कैसे ठीक कर सकता हूं? बुला अनबाइंड

$('#form1').unbind('submit'); 
$('#form1')[0].submit(); // call native submit 

http://api.jquery.com/unbind/

उत्तर

27

प्रयास करें:


$('#form1').unbind('submit').submit(); 
+0

कि महान काम किया करते हैं, धन्यवाद तरीका था – Dog

3

unbinding कोशिश अपनी सफलता पर घटना सबमिट करें। चेकआउट इस यूआरएल: http://jquery.malsup.com/form/

फिर अपने js स्क्रिप्ट में आप अनबाइंड() डिफ़ॉल्ट व्यवहार पर वापस लौटने के लिए उपयोग कर सकते इस

var myvalidator = $('#form1').bValidator(optionsGrey); 

$('#form1').submit(function(){ 
    if(myvalidator.isValid()){ 
     $(this).unbind('submit').submit(); 

}); 
+0

अनबाइंड निश्चित रूप से जाने के लिए :) – Dog

+0

+1 टी.के.एस चाल – Mike

0

आप ajax के माध्यम से पर्चे को जमा करने के लिए प्लगइन jquery.form उपयोग कर सकते हैं के द्वारा अपने ajax कॉल की विधि:

1

की तरह कुछ प्रयास करें।

var myvalidator = $('#form1').bValidator(optionsGrey); 

$('#form1').submit(function() { 

    if(myvalidator.isValid()) { 

     $.ajax({ 
      data: $('#form1').serialize(), 
      type: "POST", 
      url: "email_send.asp", 
      success: function(){ 
       $('#form1').unbind('submit'); 
       $('#form1').submit(); 
      } 
     }); 

    } 

    return false; 

}); 
1

हम्म मुझे यकीन है कि मुझे समझ में नहीं हूँ। आप हमेशा email_send.asp पर सबमिट कर रहे हैं और हर सफलता पर ऐसा करता है, इसलिए यह बहुत स्पष्ट लगता है कि आप एक लूप में क्यों फंस गए हैं।

यदि मैं आपको सही समझता हूं, तो दूसरा सबमिट एक अलग सफलता हैंडलर के साथ एक और यूआरएल होना चाहिए, है ना?

$('#form1').submit(function() { 
    if (myvalidator.isValid()) { 
    $.ajax({ 
     data: $('#form1').serialize(), 
     type: "POST", 
     url: "email_send.asp", 
     success: function(){ 
     $.ajax({ 
      data: $('#form1').serialize(), 
      type: 'POST', 
      url: 'third_party.asp', 
      success: function() { 
      //display thank you message 
      }    
     }); 
     } 
    }); 
    }  
}); 

संपादित यहाँ अपनी टिप्पणी के अनुसार एक अद्यतन जवाब है:

तो, प्रपत्र फिर से जमा करने के बजाय आप किसी मूल ajax समारोह लिख सकता है

var myvalidator = $('#form1').bValidator(optionsGrey); 

$('#form1').submit(function(){  
    if(myvalidator.isValid()){ 
    $.ajax({ 
     data: $('#form1').serialize(), 
     type: "POST", 
     url: "email_send.asp", 
     success: function(){ 
     $('#form1').unbind('submit').submit(); 
     } 
    }); 
    } 
    return false; 
}); 
+0

हाँ, वह यह है कि मैं मूल रूप से (2 अलग ajax पदों) करने की कोशिश की क्या है, लेकिन डेटा सबमिट करने तीसरे पक्ष की प्रणाली के लिए मेरे लिए काम नहीं किया ... यह डेटा जमा कर सकता है लेकिन 'सफलता' वापस नहीं कर रहा था ... यही कारण है कि मैंने एक ईमेल भेजने के लिए AJAX के माध्यम से एक बार फॉर्म जमा करने का निर्णय लिया था, और उसके बाद फॉर्म को दूसरी बार परंपरागत तरीके सबमिट करें ... – Dog

+0

ओह ठीक है, लेकिन आपको पता है कि दूसरा सबमिट पहले जैसा ही एक्साक होगा? मैं आपके लिए अपना जवाब अपडेट करूंगा! – tbleckert

+0

अपडेट के लिए धन्यवाद ... 'unbind' फ़ंक्शन कुंजी था :) – Dog

0

क्या आपके पास submit -method का उपयोग करने का एक कारण है? एक अनंत लूप दर्ज करने का कारण यह है क्योंकि यह उसी सबमिट ईवेंट श्रोता को फिर से आमंत्रित करता है।

यदि नहीं, तो आप केवल दो AJAX-submits, एक ई-मेल पेज पर और फिर क्लाइंट को कतारबद्ध कर सकते हैं।

अंत में, आप ईवेंट श्रोता को अनइंड कर सकते हैं। किसी ईवेंट श्रोता को अनबिंड करने का एक छोटा ज्ञात तरीका ईवेंट ऑब्जेक्ट को unbind -call में पास करना है। यह केवल वर्तमान ईवेंट श्रोता को अनबिंड करेगा:

$('#form1').submit(function(e){ 
    if(myvalidator.isValid()){ 
$form = $('#form1'); 
$.ajax({ 
    data: $form.serialize(), 
       type: "POST", 
       url: "email_send.asp", 
       success: function(){ 
       $form.unbind(e).submit(); 
       } 
      }); 
    } 
    return false; 
}); 
0

पुनर्निर्देशन के बिना अलग-अलग URL पर दो बार फॉर्म सबमिट करने का एक उदाहरण कोड है। दो बार "टेस्ट" बटन पर क्लिक करें।

<!DOCTYPE html> 
    <html> 
    <head> 
    <meta charset="ISO-8859-1"> 
    <title>Insert title here</title> 
    <script type="text/javascript" src="jQuery.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function() { 
     $("#testBtn").click(function() { 
      $("#form").submit(); 
      $("#form").submit(function() { 
       $("#form").attr("action", "download"); 
      }); 
     }); 
    }); 
    </script> 
    </head> 
    <body> 
     <form id="form" enctype="multipart/form-data" method="post" 
      action="upload" target="myIFrame"> 
      <input type="hidden" name="FileName" /> 
      <input type="file" name="FileDialog" size="100" /> 
      <input type="submit" /> <input name="txt" type="text" /> 
     </form> 
     <input id="testBtn" type="button" value="Test" /> 

     <iframe style="display: none;" src="javascript:''" id="myIFrame"> 
      <html> 
       <head></head> 
       <body></body> 
      </html> 
     </iframe> 
    </body> 
    </html> 
-1

मुझे एक ही समस्या का सामना करना पड़ रहा था। तब मैंने देखा कि मैंने गलती से अपनी कस्टम जावास्क्रिप्ट फ़ाइल को दो बार जोड़ा था, इसलिए फॉर्म दो स्क्रिप्ट द्वारा दो बार सबमिट किया जा रहा था। पेज के एक स्क्रिप्ट लिंक फॉर्म फूटर को हटाकर समस्या हल हो गई थी।

<script src="<?php echo base_path; ?>/js/custom.js"></script> 
<script src="<?php echo base_path; ?>/js/custom.js"></script> 
संबंधित मुद्दे