Asp.net

表單中的表單和 JSON 呼叫

  • December 20, 2012

在我的頁面中,我有一個表格:

  <form method="post" id="confirm-order-form" name="confirm-order-form">

在表單中,我編寫了一些腳本來進行 JSON 呼叫:

<script type="text/javascript"><xsl:text disable-output-escaping="yes"><![CDATA[
   $(function() {
       $('#submit').click(function() {
            if ($('#nlapproved').attr('checked')) {
               newsletter();
           }
       });

       function newsletter()
       {
           $form = $('<form action="http://mydomain.createsend.com/t/j/s/jtes/" method="post" id="subForm" />');
           $form.append('<input type="hidden" name="cm-name" id="hidName" />');
           $form.append('<input type="hidden" name="cm-jtes-jtes" id="hidEmail" />');
           $form.append('<input type="hidden" name="cm-fo-pikty" id="hidPrivateBusiness" />');

           $form
               .find("#hidName")
               .val(']]></xsl:text><xsl:value-of select="$context//checkoutinformation/info[key='name']/value" disable-output-escaping="yes"/><xsl:text disable-output-escaping="yes"><![CDATA[');

           $form
               .find("#hidEmail")
               .val(']]></xsl:text><xsl:value-of select="$context//checkoutinformation/info[key='email']/value" disable-output-escaping="yes"/><xsl:text disable-output-escaping="yes"><![CDATA[');

           $form
               .find("#hidPrivateBusiness")
               .val(']]></xsl:text><xsl:value-of select="$acctype"/><xsl:text disable-output-escaping="yes"><![CDATA[');

           $.getJSON(
               $($form).get(0).action + "?callback=?",
               $($form).serialize(),
               function (data) {
                   if (data.Status === 400) {
                       alert("Error: " + data.Message);
                   } else { 
                       // 200
                       alert("Success: " + data.Message);
                   }
               }
           );
       }
   });
   ]]>
   </xsl:text>
</script>

我的問題是,當外部形式存在時,這個東西不起作用——否則程式碼可以正常工作。注意:我正在將此頁面重定向到外部表單後面的另一個物理伺服器,並且在我的第一個表單中有很多其他控制項,所以我不能簡單地避免這種情況。任何人都可以幫忙嗎?

正在送出實際表格。停下:

$("#confirm-order-form").on('submit', function (e) { e.preventDefault(); });

編輯:送出ajax,然後是正常形式:

...ajax.done(function () {
  $("#confirm-order-form").off('submit').trigger('submit');
});

ajax成功完成後,解除對錶單送出的阻止,觸發一次送出。

1)在具有該屬性div的表單之外添加一個。runat="server"

<form runat="server">

   <!-- stuff here -->

</form>

<div id="target"></div>

2)編寫你的jQuery選擇器來定位那個div。

$('#target').append('<form id="newform"></form>');

// add your controls...

$.post(
   'your_action', 
   $('#newform').serialize(), 
   function(result){ 
       // handle result... 
   }, 
   'json');

3)對伺服器表單做任何你需要做的事情……

引用自:https://stackoverflow.com/questions/13953673