Eu sou relativamente novo no jQuery e no AJAX em particular. Eu tenho um pequeno problema com o valor de retorno sempre sendo 0, apesar de achar que essa é realmente a mensagem de sucesso e não está retornando nada.
Examinei o Google-verse e tenho a função die () no retorno de chamada do PHP e acredito que as add_actions estão corretas.
Estou trabalhando em um host local, mas duvido que isso o afete e isso é tudo do administrador, não do front-end. Também verifiquei se o js está na fila e localizado.
Recebo uma mensagem de 200 OK na área de desenvolvedor do Chrome.
Também testei o AJAX básico em http://codex.wordpress.org/AJAX_in_Plugins e ele também retornou 0, o que me faz pensar se é algo diferente do código descrito abaixo.
No momento, estou apenas tentando fazê-lo enviar algo de volta ao jQuery. Qualquer ajuda seria apreciada.
O 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
O 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()
parece estranho.Respostas:
Uma
0
resposta significa que a ação não está definida (nos dados ajax) ou que a função de retorno de chamada da ação não pode ser encontrada.fonte
.always
para capturá-lo.O que você precisa fazer é adicionar
die();
no final de sua função.Veja o motivo e muito mais aqui: http://codex.wordpress.org/AJAX_in_Plugins
Notas:
echo
algo antes de executardie
. Isso evitará erros do servidor e ajudará na depuração.fonte
die()
sem ecoando algo fora, isso vai também dar-lhe um erro 500 Internal Server, e voltar0
parawp-admin/admin-ajax.php
. Você sempre deve repetir algo, mesmo que esteja apenas configurando valores e nada seja necessário para retornar. Caso contrário, se você não repetir nada edie()
tiver que usá.always()
-lo para capturá-lo, ele não estará presente.done()
, estará presente.fail()
porque morrerá sem nada = 500 Erro.die();
na função ajax nofunctions.php
arquivo sem repetir nada antes disso e chamar a ação via ajax, por exemplo: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); });
Então eu resolvi. Não foi o jQuery como tal, embora eu tenha melhorado isso, foi o posicionamento da função de retorno de chamada. Mudei para o arquivo principal do plugin e funcionou.
fonte
Eu tenho o mesmo problema. E resolveu. Você deve enviar a variável "action" como no exemplo:
Como no wp-admin / admin-ajax.php é manipulador da variável de ação:
fonte
action
parâmetro. Embora isso possa ter funcionado para você, não foi o problema aqui.Tente executar este código no console
Posso ver muitas coisas erradas sobre seu código JavaScript e esse pode ser o motivo.
fonte
Eu também tinha esse problema e era o fato de eu estar usando em
return
vez daecho
minha função PHP. Alterando paraecho
corrigi-lo.fonte
Eu tive o mesmo problema, para corrigi-lo, usei
wp_die()
no final da minha função logo após umecho
. Não se esqueça de passar sua ação ao seu script.Para ter certeza, verifique se sua função deve ser usada
wp_ajax_nopriv
comowp_ajax
.fonte
Apenas para referência, para qualquer um que chegar aqui pesquisando no Google "o pedido ajax está retornando 0": lembre-se de quando você adicionar uma ação ajax ao método do objeto para garantir que o modificador de acesso seja
public
.add_action
apenas silencia se não puder chamar seu método fora de$object
.fonte
Se você não usar a função wp_localize_script () para definir o URL do ajax, o admin ajax retornará 0. Eu acho que é um bug do Wordpress. Aqui está um exemplo:
O arquivo javascript (search.js):
fonte
// função de código php
fonte
Quem receber o erro 0 :), action => 'action'
fonte
Espero que seja útil para você, melhor
fonte
Tente adicionar uma
if
declaração:fonte