¿Cómo conecto una solicitud Ajax en una devolución de llamada de PHP?

4

Siguiendo las instrucciones aquí enlace

Escribí este código:

EDITADO PARA INCLUIR LA MUERTE (), AÚN NO FUNCIONA

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

Sé que es un montón de código, pero simplemente no puedo averiguar dónde está el error.

Muchas gracias.

    
pregunta Kate Ray 24.01.2012 - 00:07

3 respuestas

4

Tu url debería estar apuntando a admin-ajax.php

echo admin_url('admin-ajax.php');
    
respondido por el Milo 24.01.2012 - 00:23
1
  

EDIT : encontré varios problemas con tu método.

Así es como debería hacerse para su caso, seguí adelante y reescribí algunas cosas.

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 lees cuidadosamente el Codex y comparas tu código con el código aquí , son muy diferentes. Estabas tratando de usar un método que la mayoría consideraría apropiado, pero WP ya puede hacer estas cosas por ti (de lo que no me había dado cuenta hasta hace un par de días, ¡así que no te sientas mal!)

Lo que hice es usar el método nativo ajaxurl y jQuery.post de WP para llamar a admin-ajax.php y enviar la información sendData a una función que hará algo con esas variables, y luego devolver un response para que puedas hacer algo con eso también.

    
respondido por el Jared 24.01.2012 - 00:17
1

Parece que necesitas dividir lo que estás haciendo en dos partes.

1 / Consulte su API externa, y luego devuelva su clave API

2 / Asociar la clave API a un usuario.

Por lo tanto, primero consultaría su API a través de una llamada ajax estándar, y luego, en el controlador de éxito de esa primera llamada ajax, ejecute su llamada wp admin-ajax interna para asociar al usuario con la clave API.

    
respondido por el Dale Sattler 24.01.2012 - 01:53

Lea otras preguntas en las etiquetas