web-dev-qa-db-ja.com

wordpressでajaxを呼び出す方法

出力が理由を知らないため、私のajaxコール出力は常に0を示しています

functions.phpこのコードがあります

function get_data() {
    $abc = '1';
    $result = $wpdb->get_results("SELECT * FROM ".$wpdb->options ." WHERE option_name LIKE '_transient_%'");
    echo  $result; //returning this value but still shows 0
    wp_die();
}

add_action( 'wp_ajax_nopriv_get_data', 'get_data' );
add_action( 'wp_ajax_get_data', 'get_data' );

そして、私のajax呼び出しはJavaScriptです

$('body').on("click", ".re-reset-btn", function(e){

    var panel = $('#re-compare-bar');       

    $.ajax({
             type : "GET",
             dataType : "json",
             url : "/wp-admin/admin-ajax.php",
             data : {action: "get_data"},
             success: function(response) {

                   alert("Your vote could not be added");
                   alert(response);
                }
        });   

    $("#re-compare-bar-tabs div").remove(); 
    $('.re-compare-icon-toggle .re-compare-notice').text(0); 

});

プラグインを使用せずにwordpressでajax呼び出しを行っていますが、渡したものを取得していません。$ abcを出力しても、0が表示されます。

9
smarttechy

バックエンドには、WordPress自体によって定義されたグローバルajaxurl変数があります。

この変数はフロントエンドでWP=によって作成されません。つまり、フロントエンドでAJAX呼び出しを使用する場合は、このような変数を自分で定義する必要があります。 。

これを行う良い方法は、wp_localize_scriptを使用することです。

AJAX呼び出しがmy-ajax-script.jsファイルにあると仮定し、次のようにこのJSファイルにwp_localize_scriptを追加します。

function my_enqueue() {
      wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery') );
      wp_localize_script( 'ajax-script', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
 }
 add_action( 'wp_enqueue_scripts', 'my_enqueue' );

JSファイルをローカライズした後、JSファイルでmy_ajax_objectオブジェクトを使用できます。

jQuery.ajax({
    type: "post",
    dataType: "json",
    url: my_ajax_object.ajax_url,
    data: formData,
    success: function(msg){
        console.log(msg);
    }
});
12
Vigneshwaran J

admin_url('admin-ajax.php');を使用してadmin-ajax.phpを追加します

<script type="text/javascript">
    $('body').on("click", ".re-reset-btn", function(e){

            var panel = $('#re-compare-bar');       

            $.ajax({
                     type : "POST",
                     dataType : "json",
                     url : "<?php echo admin_url('admin-ajax.php'); ?>",
                     data : {action: "get_data"},
                     success: function(response) {

                           alert("Your vote could not be added");
                           alert(response);
                        }
                });   

            $("#re-compare-bar-tabs div").remove(); 
            $('.re-compare-icon-toggle .re-compare-notice').text(0); 

        });
    </script>
2
Shital Marakana

応答で0を取得している場合は、ajax呼び出しが正しく機能していることを意味します。ただし、関数get_dataで$ wpdbをグローバル変数として定義していません。エラーログを確認してください。そこにエラーが表示されているはずです。試してください:

function get_data() {
global $wpdb;
        $abc = '1';
        $result = $wpdb->get_results("SELECT * FROM ".$wpdb->options ." WHERE option_name LIKE '_transient_%'");
        echo  $result; //returning this value but still shows 0
        wp_die();

}
0
Awais Umar