0

これは WordPress サイトにあります。次の php を使用して、入力ボックスからユーザーのメールを取得し、mailchimp リストに追加しています。すべての重いmailchimpのことを行うjsとphpのページがありますが、それは私の質問にとって重要ではありません:

<?php  
// store-address.php

function storeAddress(){

    // Validation
    if(!$_GET['email']){ return "No email address provided"; } 

    if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $_GET['email'])) {
        return "Email address is invalid"; 
    }

    require_once('MCAPI.class.php');
    // grab an API Key from http://admin.mailchimp.com/account/api/
    $api = new MCAPI('my-api-key');

    // grab your List's Unique Id by going to http://admin.mailchimp.com/lists/
    // Click the "settings" link for the list - the Unique Id is at the bottom of that page. 
    $list_id = "my-list";

    if($api->listSubscribe($list_id, $_GET['email'], '') === true) {
        // It worked!   
        return 'Success! Check your email to confirm sign up.';
    }else{
        // An error ocurred, return error message   
        return 'Error: ' . $api->errorMessage;
    }

}

// If being called via ajax, autorun the function
if($_GET['ajax']){ echo storeAddress(); }
?>

次に、ユーザーが電子メールを入力するページで、応答を取得し、メッセージの結果を表示します。これがその部分です:

<div id="emailList">
    <form id="signup" action="<?=$_SERVER['PHP_SELF']; ?>" method="get" >
    <label>signup for our email list</label>

    <input type="text" id="email" class="email" name="email" />
    <input type="submit" value="OK" id="emailSubmit" name="submit" />

    </form>
    <script type="text/javascript" src="path/to/js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="path/to/js/mailing-list.js"></script>
</div><!-- end emailList -->
<div id="response">
    <? require_once('inc/store-address.php'); 
    if($_GET['submit'])
    {
        echo storeAddress(); 
    } ?>
</div><!-- end response-->
<script type="text/javascript">
    $(document).ready(function() {
        $("#emailSubmit").click(function() {
                    $('#response').fadeIn(1500).delay(3500).fadeOut(1500);
                    });
                });
</script>

私の質問は簡単です。何かを実装して、成功した場合に「成功しました。メールを確認してサインアップを確認してください」というメッセージが返されるようにするにはどうすればよいですか。事前に入力されたままにするのではなく、入力ボックスの値をクリアするだけですか? 入力ボックス ID は「email」です。

を使用する必要があると思います。val("")どういうわけか、成功した場合にのみメールをクリアする方法がわかりません。

4

1 に答える 1

1

1 つの簡単な解決策は次のとおりです。

PHP

if($api->listSubscribe($list_id, $_GET['email'], '') === true) {
    // It worked!   
    return '<span class="success">Success! Check your email to confirm sign up.</span>';
}else{
    // An error ocurred, return error message   
    return 'Error: ' . $api->errorMessage;
}

JS

$(document).ready(function() {
    if($('.success').length > 0) {
         $('#email').val('');
    }
});

編集:完全なajaxソリューション

$(document).ready(function() {
    var clearOnSuccess = function() {
        if ($('.success').length > 0) {
            $('#email').val('');
        }
    };
    clearOnSuccess();

    $('#signup').submit(function() {
        var data = $(this).serializeArray();
        data.push({'name': 'ajax', 'value': 1});
        var jqXHR = $.ajax({
            url: $(this).attr('action'),
            type: $(this).attr('method'),
            data: data
        });

        jqXHR.done(function(data) {
            $('#response').html(data).fadeIn(1500).delay(3500).fadeOut(1500);
            clearOnSuccess();
        });
        return false;
    });
});
于 2012-05-01T20:44:10.520 に答える