web-dev-qa-db-ja.com

どうやって走れますか AJAX ボタンクリックイベント

更新: AJAXがうまく動作したが、クリックイベントではうまくいかなかった。これに合わせて質問を更新しました。

私はこのページで見つけたいくつかのコードを試しています: 'AJAX in Plugins'

しかし、私はそれを機能させることができません、そして、私は本当にどこから見始めるべきかわかりません。クリック機能を削除してpageloadでコードを実行するだけでうまくいきます。

私はこのように見えるJavascriptファイルがあります。

jQuery(document).ready(function(){
    jQuery("#createremotesafe").click(function(){
        alert ('test');
        var data = {
            action: 'my_action',
            whatever: 1234
        };

        // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php

        jQuery.post(ajaxurl, data, function(response) {
            alert('Got this from the server: ' + response);
        });
    });    
});

そして私のPHPスクリプトのどこかにJavascriptを実行するボタン(すなわち管理者ページ)を生成し、それ以外のページも生成します。

add_action('wp_ajax_my_action', 'my_action_callback');
echo 'test2';
function my_action_callback() {
  global $wpdb; // this is how you get access to the database
  $whatever = $_POST['whatever'];
  $whatever += 10;
  echo $whatever;
  die(); // this is required to return a proper result
}

Alert ('test')echo 'test2'の両方を受け取りますが、応答アラートは受け取りません。 Javascriptのエラーなど何もありません。両方のテストを見ることができるので、私のコードは確実に実行されていますが、なぜAJAXが応答しないのでしょうか。私のphp機能はページロード後に消えますか?たぶん私は組み込みのwp AJAX関数を使うことができない/すべきではないですか?

空のアラートボックスも表示されず、何も起こりません。

7
joon

実用的なコードベースから始めてください。

add_action('in_admin_header', 'my_ajax_button');

function my_ajax_button() {
    echo '<a href="#ajaxthing" class="myajax">Test</a>';
}

add_action('admin_head', 'my_action_javascript');

function my_action_javascript() {
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {

    $('.myajax').click(function(){
        var data = {
            action: 'my_action',
            whatever: 1234
        };

        // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
        $.post(ajaxurl, data, function(response) {
            alert('Got this from the server: ' + response);
        });
    });


});
</script>
<?php
}

add_action('wp_ajax_my_action', 'my_action_callback');

function my_action_callback() {
     global $wpdb; // this is how you get access to the database

     $whatever = $_POST['whatever'];

     $whatever += 10;

             echo $whatever;

     exit(); // this is required to return a proper result & exit is faster than die();
}

それはコーデックスページからのコード(細かい調整を加えたもの)であり、それは私にとっては全く問題ないので、それを出発点として使用することをお勧めします。 ?

注: Markは私です。別のPCからサイトにアクセスするときはセカンダリアカウントを使用します(私のものではありません)。

8
t31os