web-dev-qa-db-ja.com

Ajaxリターンコード400

以前にwordpressでajaxを使用したことがなく、youtubeのビデオチュートリアルに従って簡単なajaxリクエストを作成しようとしていますが、常に次のエラーメッセージが返されます。ステータス400(不良リクエスト)

私のjavascript(自分のテンプレートファイル内):

jQuery.ajax({
                url: ajaxurl,
                type: "POST",
                dataType: 'json',
                data: {
                    action: 'my_action'
                },

                success: function ( response ) {
                    console.log("success");
                    alert("success");   
                },
                error: function( error ){
                    console.log("error");
                    alert("error");
                }
            });

functions.phpファイル:

<?php



add_action('wp_ajax_my_action', 'insertEmail');
add_action('wp_ajax_nopriv_my_action', 'insertEmail');

function insertEmail(){
  echo "<script> alert('functions fil'); </script>"
  die();
}

?>
1
Svante

WordpressでAJAXの送信に使用する基本スニペットを以下に示します。

<?php
if (isset($_POST['my_theme_ajax_submit']))
    if ( wp_verify_nonce( $_POST['nonce'], 'my_theme_ajax_submit' ) )
        my_theme_ajax_submit(); 

function my_theme_ajax_submit() {
    // do something
    // some php code that fires from AJAX click of #fire
    wp_mail( '[email protected]', 'my_theme_ajax_submit() fired', time());
    wp_die();
}
?>

<button id='fire'>Fire Something</button>

<script>
    jQuery('#fire').click(function(){
        jQuery.ajax({
            type: 'post',
            data: { 
                "my_theme_ajax_submit": "now",
                "nonce" : "<?php echo wp_create_nonce( 'my_theme_ajax_submit' ); ?>"
            },
            success: function(response) { 
                jQuery('#fire').text("Somthing Done!");
            },
            error: function(response) { 
                jQuery('#fire').text("...error!");
            },
        });
    });
</script>

これはより適切に構築することができます-スクリプトを wp_enque_script() に格納し、my_theme_ajax_submit()条件チェック/ init (テンプレート内ではなく)のような初期フックで起動するか、適切な wp_ajax_(action) フック(私には役に立たないようですが)-しかし、それはアイデアを与えるはずです。

2
David Sword