4

I am trying to dynamically create a campaignmonitor newsletter subscription inside my XSLT code.

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

Everything works fine till i call getJSON method. After that nothing works. I cant find any JavaScript errors in my Mozilla Error console. And i have checked whether the form is created correctly alert($('<div>').append(($form).clone()).html()); displays correct result.

<form action="http://mydomain.createsend.com/t/j/s/jtes/" method="post" id="subForm"><input value="552" name="cm-name" id="hidName" type="hidden"><input value="aks@mydomain.com" name="cm-jtes-jtes" id="hidEmail" type="hidden"><input value="268278" name="cm-fo-pikty" id="hidPrivateBusiness" type="hidden"></form>
4

1 に答える 1

1

jQuery API ドキュメントで、コールバック関数を次のように記述します。

success(data, textStatus, jqXHR) リクエストが成功した場合に実行されるコールバック関数。

たぶん、失敗リスナーを追加すると役立つでしょう:

$.getJSON(
    $($form).get(0).action + "?callback=?",
    $($form).serialize(),
    function (data) {
        if (data.Status === 400) {
            alert("Error: " + data.Message);
        } else { 
            // 200
            alert("Success: " + data.Message);
        }
    }
).error(function(data) {
    alert('have error http: ' + data);
}).complete(function(data){
    alert('have complete: ' + data);
});

アップデート:

JSON エラーと関係がある場合もあります。APIドキュメントから:

重要: jQuery 1.4 の時点で、JSON ファイルに構文エラーが含まれている場合、リクエストは通常​​、サイレントに失敗します。

通話に切り替えると、$.get(...)この理論がテストされる可能性があります。

于 2012-12-18T11:23:22.250 に答える