Como faço para ligar um pedido Ajax a um retorno de chamada PHP?

4

Siga as instruções aqui enlace

Eu escrevi este código:

EDITADO PARA INCLUIR MORRER (), AINDA NÃO TRABALHA

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

Eu sei que é uma tonelada de código, mas não consigo descobrir onde está o erro.

Obrigado uma tonelada.

    
por Kate Ray 24.01.2012 / 00:07

3 respostas

4

Seu URL deve estar apontando para admin-ajax.php

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

EDIT : Encontrei vários problemas com o seu método.

É assim que deve ser feito para o seu caso, eu fui em frente e reescrevi algumas coisas.

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
}

Se você ler o Codex cuidadosamente e comparar seu código com o código , eles serão muito diferentes. Você estava tentando usar um método que seria mais apropriado, mas o WP já pode fazer essas coisas por você (o que eu nem percebi até alguns dias atrás, então não se sinta mal!)

O que fiz foi usar o método ajaxurl e jQuery.post nativo do WP para chamar admin-ajax.php e enviar as informações de sendData para uma função que fará algumas coisas com essas variáveis e, em seguida, retornar um response então você pode fazer algo com isso também.

    
por Jared 24.01.2012 / 00:17
1

Parece que você precisa dividir o que você está fazendo em duas partes.

1 / Consulte sua API externa e retorne sua chave de API

2 / Associe a chave da API a um usuário.

Portanto, primeiro eu consultaria sua API por meio de uma chamada ajax padrão e, no manipulador de sucesso dessa primeira chamada ajax, executaria sua chamada wp admin-ajax interna para associar o usuário à chave da API.

    
por Dale Sattler 24.01.2012 / 01:53