ホームページ  >  記事  >  バックエンド開発  >  PHP 関数に echo ステートメントがあるにもかかわらず、WordPress AJAX 呼び出しが「0」を返すのはなぜですか?

PHP 関数に echo ステートメントがあるにもかかわらず、WordPress AJAX 呼び出しが「0」を返すのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-30 19:38:03515ブラウズ

Why is my WordPress AJAX call returning '0' despite having an echo statement in the PHP function?

WordPress で Ajax を呼び出す方法

問題

AJAX 呼び出しは常に出力として「0」を返し、そのままになります。開発者は困惑しました。 function.php ファイルには次のコードが含まれています:

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

add_action('wp_ajax_nopriv_get_data', 'get_data');
add_action('wp_ajax_get_data', 'get_data');</code>

一方、AJAX 呼び出しは JavaScript 経由で行われます:

<code class="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);

});</code>

変数 $abc を出力しようとしたにもかかわらず、結果は

解決策

WordPress では、AJAX 呼び出し用にデフォルトでグローバル変数 ajaxurl が提供されます。ただし、この変数はフロントエンドでは定義されていません。フロントエンドで AJAX 呼び出しを利用するには、ajaxurl を手動で定義する必要があります。

推奨されるアプローチは、wp_localize_script を使用することです。 AJAX 呼び出しが「my-ajax-script.js」に存在することを考慮し、次のように wp_localize_script を追加します。

<code class="php">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' );</code>

JS ファイルがローカライズされたら、JS ファイル内の my_ajax_object オブジェクトにアクセスして変更できます。それに応じて AJAX 呼び出しを行います:

<code class="javascript">jQuery.ajax({
    type: "post",
    dataType: "json",
    url: my_ajax_object.ajax_url,
    data: formData,
    success: function(msg){
        console.log(msg);
    }
});</code>

以上がPHP 関数に echo ステートメントがあるにもかかわらず、WordPress AJAX 呼び出しが「0」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。