在我的页面中,我有一个表单:
<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成功完成后,取消对表单提交的预防,并触发提交.