Por que o WordPress adiciona 0 (zero) a uma resposta do Ajax?

16

A menos que eu finalize a função de processamento do Ajax por exit()ou die(), a função Ajax recebe a saída desejada e correta, mas seguindo por 0.

Alguma idéia de por que isso está acontecendo?

Isso é para ser assim ou pode ser corrigido?

add_action('wp_ajax_get_homepage', 'get_homepage');
add_action('wp_ajax_nopriv_get_homepage', 'get_homepage');

function get_homepage(){
    echo "get_homepage ->";
    exit();
}

Eu li no AJAX em Plugins , mas por que isso é necessário?

Radek
fonte
Isso (a adição de 0) acontece mesmo se você estiver desconectado do wordpress?
Murdaugh
Sim, mesmo que eu não esteja logado no WordPress.
Radek #

Respostas:

31

A resposta padrão de admin-ajax.phpé,

die( '0' );

... adicionando seu próprio wp_die()ou exit()ou die()depois de voltar suas impede que o conteúdo desejado a resposta padrão de admin-ajax.phpque estão sendo devolvidos também.

Geralmente, também significa que sua chamada ajax foi bem-sucedida.

Por fim, para responder à sua pergunta, é para funcionar dessa maneira. O que você está fazendo saindo após retornar o conteúdo é a coisa certa a fazer.

Adão
fonte
Obrigado pela explicação. Então, eu uso die () ou verifico se há 0 no ajax para saber se estava tudo bem?
Radek
2
Use die()ou exit()depois de ecoar seu conteúdo / dados. Na success/completefunção de retorno de chamada do seu método ajax, você pode manipular os dados e usá-los para preencher o DOM. Você também pode fazer qualquer verificação de erro adicional para validar a integridade dos dados. Você também pode fazer a verificação de erros na função de retorno de chamada do PHP antes da saída. A saída essencial após o retorno de sua resposta garantirá que você também não se dê 0bem. A propósito, apenas porque você recebe uma 0resposta, não significa que sua chamada ajax tenha 100% de êxito. No entanto, é fácil saber quando você inspeciona sua saída.
Adam
1
Você deve estar usando wp_die()adicionado em 2.0.4
thrillcode
@thrillcode, a menos que você precise expor o processo wp_diea outros plug-ins ou códigos de temas que possam se conectar ao processo, usando dieou exitestá ok. Se você pretende liberar seu código como OSS ou não, onde seu código precisa ser agradável com os outros, wp_dieseria mais preferível, concordou.
Adam