web-dev-qa-db-ja.com

登録メールチェック付き AJAX

登録フォームのEメールでAJAXチェックをするようにしています。私のコードはこのようになります:

function add_ajaxurl_cdata_to_front(){ ?>
    <script type="text/javascript"> //<![CDATA[
        ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ); ?>';
    //]]> </script>
<?php }

add_action( 'wp_head', 'add_ajaxurl_cdata_to_front', 1);
add_action( 'wp_footer', 'add_js_to_wp_footer' );
function add_js_to_wp_footer(){ ?>
    <script type="text/javascript">
    jQuery('#reg_email').on("change",function(){
        jQuery.ajax({
            type: 'POST',
            url: ajaxurl,
            data: {"action": "custome_ajax_email_check"},
            success: function(data){
                if(data.result) {
                    alert('Email exists!');
                } else {
                    alert('Email does not exist!');
                    console.log(data.result)
                }
            }
        });
    });
    </script>
<?php }

add_action('wp_ajax_nopriv_custome_ajax_email_check', 'custome_ajax_email_check');

function custome_ajax_email_check(){
    $email = $_POST['email'];

    // do check
    if ( email_exists($email) ) {
        $response->result = true;
    }
    else {
        $response->result = false;
    }

    echo $response;
}

私はいつも間違った応答を受けていて、$ responseをエコーすると500 Internal Server Errorを受け取ります。

何がおかしいのですか?

1
ShabbyAbby

あなたはあなたのajaxでいくつかのことを見逃しています。あなたの問題を解決するのに役立つ以下の最新のコードを見つけてください

function add_ajaxurl_cdata_to_front(){ ?>
   <script type="text/javascript"> //<![CDATA[
       ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ); ?>';
   //]]> </script>
<?php }

add_action( 'wp_head', 'add_ajaxurl_cdata_to_front', 1);
add_action( 'wp_footer', 'add_js_to_wp_footer' );
function add_js_to_wp_footer(){
    ?>
   <script type="text/javascript">

   jQuery('document').ready(function(){
        jQuery('#reg_email').on("change",function(){            
            jQuery.ajax({
                type: 'POST',
                url: ajaxurl,
                data: {"action": "custome_ajax_email_check"},
                success: function(data){
                    console.log(data);
                    data = jQuery.parseJSON(data);
                    console.log(data.result);
                    if(data.result) {
                        alert('Email exists!');
                    } else {
                        alert('Email does not exist!');

                    }
                }
            });
        });
    });
   </script>
<?php }

add_action( 'wp_ajax_custome_ajax_email_check', 'custome_ajax_email_check' );
add_action('wp_ajax_nopriv_custome_ajax_email_check', 'custome_ajax_email_check');

function custome_ajax_email_check(){
   $email = $_POST['email'];

   // do check
   if ( email_exists($email) ) {
       $response->result = true;
   }
   else {
       $response->result = false;
   }

   echo( json_encode( $response));
   wp_die();
}

これがお役に立てば幸いです。