Soy relativamente nuevo en jQuery y AJAX en particular. Tengo un pequeño problema con el valor de retorno siempre siendo 0, aunque creo que este es realmente el mensaje de éxito y no devuelve nada.
He buscado en Google-verse y tengo la función die () en la devolución de llamada de PHP y creo que las add_actions son correctas.
Estoy trabajando en un host local, aunque dudo que eso lo afecte y todo esto está en el administrador, no en el front-end. También verifiqué que el js está en cola y localizado.
Recibo un mensaje de 200 OK en el área de desarrollador de Chrome.
También probé el AJAX básico de http://codex.wordpress.org/AJAX_in_Plugins y también devolvió 0, lo que me hace preguntarme si es algo más que el código que se describe a continuación.
En este momento solo estoy tratando de hacer que envíe algo a jQuery. Cualquier ayuda sería apreciada.
El jQuery
jQuery(document).ready(function(){
jQuery('.cl_link_buttons').val('id').click(function() {
var currentid = jQuery(this).attr('id');
//alert(currentid);
console.log(currentid);
jQuery.ajax ( data = {
action: 'cleanlinks_ajax_get_post_data',
url: ajaxurl,
type: 'POST',
dataType: 'text',
"currentid" : currentid
});
jQuery.post(ajaxurl, data, function(response) {
var dataz = response;
alert( dataz );
console.log (dataz); //show json in console
});
return false;
}); //end click event
}); //end doc ready
El PHP
add_action("wp_ajax_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");
add_action("wp_ajax_nopriv_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");
function cleanlinks_ajax_get_post_data() {
$from_ajax = $_POST['currentid'];
echo "do" . $from_ajax . "something";
die();
}

jQuery('.cl_link_buttons').val('id').click(function()se ve raro.Respuestas:
Una
0respuesta significa que la acción no está establecida (en los datos de ajax) o que no se puede encontrar la función de devolución de llamada de la acción.fuente
.alwayspara capturarlo.Lo que debe hacer es agregar
die();al final de su función.Vea la razón y más aquí: http://codex.wordpress.org/AJAX_in_Plugins
Notas:
echoalgo antes de ejecutardie. Esto evitará errores del servidor y ayudará al depurar.fuente
die()y sin eco de algo, esto también le dará un error de servidor interno 500, y volver0awp-admin/admin-ajax.php. Siempre debe hacer eco de algo, incluso si solo está configurando valores y no es necesario devolver nada. De lo contrario, si no hace eco de nada ydie()tiene que usarlo.always()para capturarlo, porque no estará dentro.done(), lo estará.fail()porque muere sin nada = 500 Error.die();función en la función ajax en elfunctions.phparchivo sin hacer eco de nada antes de esto, y llame a la acción a través de ajax, por ejemplo:var testing = $.ajax( ... ); testing.fail(function(response) { console.log('Failed ' + response); }); testing.done(function(response) { console.log('Success ' + response); }); testing.always(function(response) { console.log('Ajax Request complete: ' + response); });Entonces lo resolví. No fue el jQuery como tal, aunque he mejorado eso, fue la ubicación de la función de devolución de llamada. Lo moví al archivo principal del complemento y funcionó.
fuente
Tengo el mismo problema Y lo resolvió. Debe enviar la variable "acción" como en el ejemplo:
Porque en wp-admin / admin-ajax.php es el controlador de la variable de acción:
fuente
actionparámetro. Si bien esto puede haber funcionado para usted, no fue el problema aquí.Intenta ejecutar este código en la consola
Puedo ver muchas cosas mal acerca de su código JavaScript y esa podría ser la razón.
fuente
También tuve este problema, y fue el hecho de que estaba usando en
returnlugar deechoen mi función PHP. Cambiándolo aechoarreglado.fuente
Tuve el mismo problema, para solucionarlo lo usé
wp_die()al final de mi función justo después de unecho. No olvides pasar tu acción en tu guión.Para estar seguro, verifique si su función tiene que usar
wp_ajax_noprivlikewp_ajax.fuente
Solo como referencia, para cualquiera que llegue aquí buscando en Google "la solicitud ajax está devolviendo 0": recuerde cuando agregue la acción ajax al método del objeto para asegurarse de que el modificador de acceso a los métodos sea
public.add_actionsimplemente silencia si no puede llamar a su método fuera de$object.fuente
Si no utiliza la función wp_localize_script () para establecer la url de ajax, admin ajax devuelve 0. Creo que es un error de Wordpress. Aquí hay un ejemplo:
El archivo javascript (search.js):
fuente
// función de código php
fuente
Aquellos que obtienen el error 0 :), action => 'action'
fuente
PRUEBA: add_action ('init', 'ly_form_ajax_init'); función ly_form_ajax_init () { wp_register_script ('ly-form-ajax-script', plugins_url (). '/ ly-form / js / ly-script.js', array ('jquery')); wp_enqueue_script ('ly-form-ajax-script'); wp_localize_script ('ly-form-ajax-script', 'ly_form_ajax_object', array ( 'ajaxurl' => admin_url ('admin-ajax.php'), 'redirecturl' => home_url (), 'loadingmessage' => __ ('') )); } // La acción es: contact_ajax add_action ('wp_ajax_contact_ajax', 'mi_función'); add_action ('wp_ajax_nopriv_contact_ajax', 'my_function'); function my_function () { ob_clean (); echo "http://sanvatvungcao.com"; wp_die (); } / ** * Código corto en una página como esta: [ly-form] * @param type $ atts * @param type $ content * @cadena de retorno * / function ly_form_shortcode ($ atts, $ content = "") { echo html_form_code (); } add_shortcode ('ly-form', 'ly_form_shortcode'); // Se mostrará el formulario HTML, función html_form_code () { $ html = ""; $ html. = ''; $ html. = ''; $ html. = 'Họ đệm *
'; $ html. = 'Tên *
'; $ html. = 'Địa chỉ *
'; $ html. = 'Email *
'; $ html. = 'Nội estiércol * dg
'; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; devolver $ html; } Y AQUÍ js (ly-script.js): (función ($) { $ (documento) .ready (función () { // Realizar el envío del formulario AJAX $ ('form.ly-form-ex'). on ('submit', función (e) { e.preventDefault (); $ ('# cargando'). html ('cargando ...'); var dataString = {action: 'contact_ajax'}; $ .ajax ({ tipo: "POST", url: ly_form_ajax_object.ajaxurl, data: dataString, éxito: función (datos) { $ ('# cargando'). html (datos); }, error: function (errorThrown) { alerta (error lanzado); } }); }); }); // termina listo }) (jQuery);Espero que sea útil para usted, mejor
fuente
Intenta agregar una
ifdeclaración:fuente