Comment puis-je associer une demande Ajax à un rappel PHP?

4

Suivez les instructions ici enlace

J'ai écrit ce code:

MODIFIÉ POUR INCLURE DIE (), NE FONCTIONNE PAS

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();
}

Je sais que c'est une tonne de code, mais je ne peux tout simplement pas savoir où se trouve l'erreur.

Merci beaucoup.

    
posée Kate Ray 24.01.2012 - 00:07

3 réponses

4

Votre URL devrait pointer vers admin-ajax.php

echo admin_url('admin-ajax.php');
    
réponse donnée Milo 24.01.2012 - 00:23
1
  

MODIFIER : votre méthode a posé plusieurs problèmes.

Voici comment cela devrait être fait pour votre cas, je suis allé de l'avant et j'ai réécrit certaines choses.

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
}

Si vous lisez attentivement le Codex et comparez votre code avec le code , ils sont très différents. Vous vouliez utiliser une méthode que la plupart des gens jugeraient appropriée, mais WP peut déjà faire ces choses pour vous (ce que je ne savais même pas jusqu'à il y a quelques jours, alors ne vous sentez pas mal!)

Ce que j’ai fait est d’utiliser la méthode native% WP_de% et la méthode ajaxurl de WP pour appeler jQuery.post et envoyer le admin-ajax.php info à une fonction qui effectuera des opérations avec ces variables, puis renverra un sendData afin que vous puissiez faire quelque chose avec cela aussi.

    
réponse donnée Jared 24.01.2012 - 00:17
1

Il semble que vous deviez diviser ce que vous faites en deux parties.

1 / Interrogez votre API externe, puis renvoyez votre clé API

2 / Associez la clé API à un utilisateur.

Ainsi, je commencerais par interroger votre API via un appel ajax standard, puis dans le gestionnaire de réussite de ce premier appel ajax, exécutez votre appel interne wp admin-ajax pour associer l'utilisateur à la clé d'API.

    
réponse donnée Dale Sattler 24.01.2012 - 01:53

Lire d'autres questions sur les étiquettes