web-dev-qa-db-ja.com

Ajaxリクエストをどのようにフックするのですか? PHP 折り返し電話?

ここの指示に従ってください http://codex.wordpress.org/AJAX_in_Plugins#Ajax_on_the_Administration_Side

私はこのコードを書きました:

DIE()を含む編集、まだ動作しない

function my_button() {
echo
"<script type = 'text/javascript'>
function ajaxRequest(){
    jQuery(document).ready(function(jQuery) {
        var sendData = {};
        sendData['action'] = 'my_action';
        sendData['external_id'] = '$postID';
        sendData['title'] = '$post_title';
        sendData['content'] = '$post_content';
        jQuery.ajax({
            type: 'POST',
            url: 'http://lvh.me:3000/s/wp',
            xhrFields: {
                withCredentials: true
            },
            headers: {'X-Requested-With': 'XMLHttpRequest'},
            data: sendData,
            error: function(jqXHR){
                console.log(jqXHR.responseText);
            },
            success: function(data){
                window.open(data['link']);
            }
        });
    })
};
</script>
<input type='button' onclick='ajaxRequest()' value='Send' />";
}

add_action( 'dbx_post_sidebar', my_button);

add_action('wp_ajax_my_action', my_action_callback);

function my_action_callback() {
  global $wpdb; // this is how you get access to the database
  $api_key = $_POST['api_key'];
  $user = wp_get_current_user();
  $user_id = $user->ID;
  add_user_meta($user_id, 'my_api_key', $api_key);
  die();
}

私はそれが大量のコードであることを知っています、しかし私はただエラーがどこにあるのか理解することができません。

トンありがとう。

4
Kate Ray

あなたのURLはadmin-ajax.phpを指しているはずです。

echo admin_url('admin-ajax.php');
4
Milo

EDIT:私はあなたの方法にいくつかの問題を見つけました。

これはあなたの場合のためにどうするべきかということです、私は先に行き、そしていくつかのことを書き直しました。

function my_button() {
echo
"<script type = 'text/javascript'>
    jQuery( document ).ready( function() {

        jQuery('input.sendajax').click( function() {

            var sendData = {
                action: 'my_action',
                external_id = $postID,
                title: '$post_title',
                content: '$post_content'
            };

            jQuery.post( ajaxurl, sendData, function( response ) {

                // You need to send some type of validation back
                // Like a 'success' variable either true or false
                // Stuff sent back is accessed through the 'response' variable, so to get the item sent back called 'success', you would use 'response.success'

                if( response.success == true ) {
                    window.open(response.link);
                } else {
                    console.log(response);
                }

            });

        });

    })
</script>
<input class='sendajax' type='button' onclick='ajaxRequest()' value='Send' />";
}

add_action( 'admin_head', 'my_button');

add_action('wp_ajax_my_action', 'my_action_callback');

function my_action_callback() {
  global $wpdb; // this is how you get access to the database
  $api_key = $_POST['api_key'];
  $user = wp_get_current_user();
  $user_id = $user->ID;
  add_user_meta($user_id, 'my_api_key', $api_key);

  $response = array( 'success' => true, 'link' => 'this is a response var' ); // Stuff to send back to AJAX
  echo json_encode( $response );

  die(); // Needs this
}

コーデックスを注意深く読み、自分のコードを code here と比較すると、それらは非常に異なります。あなたは最も適切だと思う方法を使用しようとしていましたが、WPはすでにあなたのためにこれらのことをすることができます(数日前まで気付かなかったので、気分を悪くしないでください!)

私がしたのは、WPのネイティブなajaxurlメソッドとjQuery.postメソッドを使ってadmin-ajax.phpを呼び出し、それらの変数を使って何らかの処理を行う関数にsendData情報を送ってからresponseをエコーバックすることです。

1
Jared

あなたがしていることを2つの部分に分けなければならないようです。

1 /外部APIをクエリしてから、APIキーを返します

2/APIキーをユーザーに関連付けます。

そこで、最初に標準のajax呼び出しでAPIを照会し、次にその最初のajax呼び出しの成功ハンドラーで、内部のwp admin-ajax呼び出しを実行してユーザーをAPIキーに関連付けます。

1
Dale Sattler