¿Cómo envío una solicitud ajax y obtengo una respuesta de una función?

2

He construido una función dentro de un complemento. Me gustaría llamarlo con una función jQuery ajax.

La función se define de la siguiente manera:

add_action( 'wp_ajax_my_test_ajax', 'my_test_ajax' );
add_action( 'wp_ajax_nopriv_my_test_ajax', 'my_test_ajax' );

function  my_test_ajax() {    

    $resp = array('title' => 'here is the title', 'content' => ' here is the content') ;        
    wp_send_json($resp) ;

}

Luego intento llamar a la función desde javascript:

var target = 'http://'  +  window.location.hostname  + '/wp-admin/admin-ajax.php' ;
var data = {
    action: ' my_test_ajax'
} ;
var req = jQuery.post( target , data,  function(resp) { 
    console.log(resp.responseText);
}) ;    
}

El sitio responde desde admin-ajax.php. La respuesta lleva un encabezado '200 OK'. El cuerpo de la respuesta es '0'.

El códice me dice que puedo esperar esta respuesta si el valor de 'acción' en el cuerpo de la publicación no coincide con el nombre de una función enganchada a los enganches wordpress ajax. Pero por lo que puedo decir, estoy bien allí.

Estoy seguro de que la función está incluida en mi archivo de complemento.

¿Cuáles son los otros elementos esenciales que necesito para que esto funcione?

(No quiero preocuparme por los nonces o la localización de js en este punto. Solo quiero obtener una respuesta de la función antes de continuar construyendo)

    
pregunta dave dave 01.06.2016 - 02:34

2 respuestas

2

$.ajax es muy simple y puedes agregar más parámetros fácilmente en la línea data: {action:'my_test_ajax'} . Prueba esto :

var target = 'http://'  +  window.location.hostname  + '/wp-admin/admin-ajax.php';
$.ajax({
    url: ajax,
    data: {action:'my_test_ajax'},
    type: 'post',
    success: function(data){
        console.log(data, data.title, data.content)
    }
});

Asegúrese de que target apunta exactamente a admin-ajax.php o establezca una variable global (o use el script de localización) para agregar una variable donde almacene la ruta a admin-ajax.php que es admin_url('admin-ajax.php') en caso de confusión.

$.ajax analiza los datos JSON de forma predeterminada, si trabaja con otros métodos que devuelven la respuesta tal como está (cadena), simplemente use el método JSON.parse(response) . JSON es porque usa wp_send_json($resp) que devuelve una respuesta de objeto JSON en el punto final.

Este es un ejemplo de cómo agregar más datos a la solicitud:

Usando el método append para la variable de datos o manteniéndolo corto y simple como data: {action:'my_test_ajax', name: 'dave', network: 'wpse'} y desde la función my_test_ajax puede obtener estos datos por $_REQUEST[tag] e.g $_REQUEST['name']

$.get ( $_GET ) método:

Este es aún más simple y requiere menos código:

$.get( target = '/wp-admin/admin-ajax.php?action=my_test_ajax', function( data ) {
    console.log( data )
});

Recuerde usar $_REQUEST en su script PHP porque combina todos los conjuntos de datos $_GET , $_POST y $_COOKIE . A menos que esté seguro del método con el que está trabajando.

Espero que ayude.

    
respondido por el Samuel Elh 01.06.2016 - 03:27
2

1) tienes un espacio en blanco adicional en el código, y es por eso que no funciona:

action: ' my_test_ajax'
         ^

2) también, debes incluir check_admin_referrer() !!!!!!!!!

function  my_test_ajax() {  
   check_admin_referrer();
    .........
    .........
}
    
respondido por el T.Todua 04.10.2016 - 22:07

Lea otras preguntas en las etiquetas