admin-ajax.php retorna 0. Como depuro e corrijo?

4

Tentando usar admin-ajax.php para fazer o upload da imagem a partir do formulário inicial. Eu continuo recebendo 0 com o código abaixo que tenho e não sei como depurar isso ou onde ele está errado.

Eu tenho um arquivo de entrada HTML

<input type="file" name="wh_image_upload" id="wh_image_upload" multiple="false" />

e script localizado para solicitação AJAX

$img_nonce = wp_create_nonce('image_upload_nonce');
wp_localize_script( 'ajax-script', 'ajax_image', array( 'ajax_url' => admin_url( 'admin-ajax.php' )) );

e função PHP

function write_here_featured_image_upload() {
    var_dump($_FILES);
    die();
}

add_action( 'wp_ajax_write_here_img_upload', 'write_here_featured_image_upload' );
add_action( 'wp_ajax_nopriv_write_here_img_upload', 'write_here_featured_image_upload' );

JS

// Featured image upload AJAX
    $("#wh_image_upload").change(function(){
        var userFile    =   new FormData();  
        var fileInput   =   $( "#wh_image_upload" )[0].files[0];
        //console.log(fileInput);

        userFile.append("file", fileInput);
        userFile.append("action", "write_here_img_upload");

        $.ajax({
            type: "POST",
            url: ajax_object.ajax_url,
            data: userFile,
            processData: false,
            contentType: false,
            error: function(jqXHR, textStatus, errorMessage) {
                console.log(errorMessage);
            },
            success: function(data) {
                console.log("Image Uploaded! " + data);
            }
        });
    });

Eu recebo uma mensagem de sucesso do AJAX com a resposta 0 . Image Uploaded! 0

Atualizar Eu atualizei meu código de trabalho.

    
por Ohsik 24.11.2015 / 20:00

1 resposta

5

Ativar a depuração

O WordPress tem constantes definidas em wp-config.php , onde você pode imprimir erros na tela e registrá-los em um arquivo separado localizado /wp-content/debug.log . Parece assim:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'WP_DEBUG_LOG', true );

Você pode então imprimir suas próprias informações no registro de depuração em um ponto específico e descobrir exatamente onde (ou se a função está sendo atingida) a função está errando:

function write_here_featured_image_upload() {
    error_log( 'Made it into the Ajax function safe and sound!' );
    /** ... Rest of your code ... **/
}

Verifique o Console de Ferramentas de Desenvolvimento

Quase todos os navegadores dos dias de hoje têm Developer Tools e um Console onde os erros de Javascrpit são gerados. Se você vir um erro no seu console de ferramentas de desenvolvimento, precisará consertá-lo antes de tudo.

Quanto a uma possível solução, você tem essa condição que impede você de executar o ajax no front-end do site:

if ( is_admin() ) {
    add_action( 'wp_ajax_write_here_img_upload', 'write_here_featured_image_upload' );
    add_action( 'wp_ajax_nopriv_write_here_img_upload', 'write_here_featured_image_upload' );
}

A função is_admin() diz ao WordPress para somente executar essas ações sempre que estiver no Admin Painel / Painel para que você nunca veja nada acontecer no front-end do seu site. Tente remover o condicional e apenas adicionar a ação como está:

add_action( 'wp_ajax_write_here_img_upload', 'write_here_featured_image_upload' );
add_action( 'wp_ajax_nopriv_write_here_img_upload', 'write_here_featured_image_upload' );
    
por Howdy_McGee 24.11.2015 / 20:21