問題
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 サイトの他の関連記事を参照してください。