web-dev-qa-db-ja.com

AJAX コールリターン

似たような記事がたくさんあるにもかかわらず、提案されたすべての解決策が私にはうまくいきませんでした。

次のようなスクリプトがあります。

jQuery('#term').keyup(ajaxChange);

        function ajaxChange(){
            var newFormChange = jQuery("#term").val();
            alert (newFormChange);
            jQuery.ajax({
                type:"POST",
                action: "my_test_action",
                url: "/wp-admin/admin-ajax.php",
                data: newFormChange,
                success:function(data){
                    console.log(data);
                }
            });

        return false;
        }

そしてPHPは次のようになります。

function my_test_action() {

    $var = "this is a test";
    wp_send_json($var);

    die();
}

add_action( 'wp_ajax_my_test_action', 'my_test_action' );
add_action( 'wp_ajax_nopriv_my_test_action', 'my_test_action' );

私も試してみました:echo json_encode($var)ではなくwp_send_json()またはecho $varですが、ブラウザコンソールではこの関数は常に0を返します。

私の他のAJAX呼び出しは機能します。たとえば、PHPクエリを呼び出していくつかの投稿を表示するWPスクリプトを呼び出す別のものがあり、それはうまく機能します。

編集: これが私のスクリプトが含まれる方法です:

 function add_js() {

         if (is_page_template()) {
            wp_enqueue_script( 'mycustomscript', get_stylesheet_directory_uri().'/js/mycustomscript.js', array('jquery'), '1.0', true );

            wp_localize_script('mycustomscript', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
        }
    }
    add_action('wp_enqueue_scripts', 'add_js');

jQuery(this).serialize();は最初から機能しなかったので、問題はnewFormChange変数から来ると思います。フォームは送信されずそのフィールドの1つだけが変更されるからです。だから私はそれをvar newFormChange = jQuery("#term").val();に置き換えましたが、おそらくurl: "/wp-admin/admin-ajax.php"に問題があります。

私はどこを間違えましたか?ありがとう

3
Fafanellu

actiondataキーの内側になければなりません。あなたの投稿要求にはactionという名前のキーがないので、コールバック関数は呼び出されません。

この例を考えます: -

jQuery.ajax({
    type:"POST",
    url: "/wp-admin/admin-ajax.php",
    data: { 
        action: "my_test_action",
        form_data : newFormChange
    },
    success: function (data) {
        console.log(data);
    }
});

注: /wp-admin/admin-ajax.phpのような相対的なAjax URLは絶対に使わないでください。 wp_localize_script() を使うことができます。これらを参照してください

6
Sumit

At url: "/wp-admin/admin-ajax.php"に問題があるようですが、代わりにフルパスを追加してみてください。

function addajaxurl() {
    wp_localize_script( 'frontend-ajax', 'frontendajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));
}
add_action( 'wp_enqueue_scripts', 'addajaxurl' );

そしてajax関数の中で変数を呼び出します。

        jQuery.ajax({
            type:"POST",
            url: ajaxurl,
            data: newFormChange,
            success:function(data){
                console.log(data);
            }
        }); 
0
tam

問題はアクションパラメータにあります。あなたのJavaScript関数で試してみてください。

var newFormChange = jQuery("#term").val();

    jQuery.ajax({
                    type: "POST",
                    url: "/wp-admin/admin-ajax.php",
                    data: {
                        action: "my_test_action",
                        newFormChange: newFormChange
                    }   ,
                    success: function(data) {
                        console.log(data);
                  alert(data);


                });

Die()も削除する必要があります。あなたのphp関数から。すでにwp_send_jsonにあります。

0
Florian