12

私のページには次のフォームがあります。

   <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>

私の問題は、外部フォームが存在する場合、これが機能しないことです。それ以外の場合、コードは正常に機能します。注:このページを外部フォームのポストバックにある別の物理サーバーにリダイレクトしています。最初のフォームには他にも多くのコントロールがあるため、それを簡単に回避することはできません。誰か助けてもらえますか?

4

2 に答える 2

2

実際のフォームが送信されています。それを停止する:

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

編集:ajaxを送信し、次に通常のフォームを送信します:

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

ajaxが正常に完了したら、フォーム送信の禁止を解除し、送信をトリガーします。

于 2012-12-19T15:32:52.580 に答える
0

1)属性divを持つフォームの外側に追加します。runat="server"

<form runat="server">

    <!-- stuff here -->

</form>

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

2)そのdivをターゲットにするjQueryセレクターを記述します。

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

// add your controls...

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

3)サーバーフォームで必要なことは何でもします...

于 2012-12-20T06:33:04.933 に答える