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
0
respuesta 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
.always
para 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:
echo
algo 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 volver0
awp-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.php
archivo 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
action
pará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
return
lugar deecho
en mi función PHP. Cambiándolo aecho
arreglado.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_nopriv
likewp_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_action
simplemente 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
Espero que sea útil para usted, mejor
fuente
Intenta agregar una
if
declaración:fuente