web-dev-qa-db-fra.com

jQuery Ajax renvoyant une réponse correcte, mais après une redirection vers une erreur 404

En HTML, mon action FORM = "" et ma méthode = "POST".

Dans mon appel j'ai:

    var array_dados = [];
    array_dados[0] = $("#form_email").val();
    array_dados[1] = $("#form_nome").val();
    array_dados[2] = $("#form_para").val();
    array_dados[3] = $("#form_assunto").val();
    array_dados[4] = $("#form_mensagem").val();
    var dataParam  = { action: 'enviaemailfoto',
                       dados : array_dados };                              
    var ajaxurl    = '<?php echo admin_url('admin-ajax.php'); ?>';
    alert(dataParam);
    $.ajax({
        type: "POST",
        url: ajaxurl,
        data: dataParam,
        dataType: "text",
    })
        .done(function(res) {
            alert( "sucess " +res);
        })
        .fail(function(res) {
            alert( "error " +res);
        })
        .always(function(res) {
            alert( "complete " +res);
        }); 

Sur code ajax:

add_action('wp_ajax_enviaemailfoto', 'enviaemailfoto_callback');

function enviaemailfoto_callback(){
    header('HTTP/1.1 200 OK'); /* attempt to make it work */
    require 'wp-load.php';     /* attempt to make it work */
    $dados    = $_POST['dados'];
    $email    = $dados[0];
    $nome     = $dados[1];
    $para     = $dados[2];
    $assunto  = $dados[3];
    $str      = $dados[4];
    $anexo    = $dados[5];
    $mensagem = str_replace("\n", "<BR />", $str);

    /* prepare headers, send emails */

    echo json_encode(array('type'=>'done', 
                           'text' => 'Mensagem enviada com sucesso'.$assunto));
    wp_die();  }

Tout s'exécute correctement. Les trois alertes sont affichées: 1 avant, et 2 après (succès/achèvement) ajax execute. Mais après le troisième, une page 404 non trouvée est ouverte. J'ai passé un autre appel ajax sans ce problème et j'inclus l'en-tête ('HTTP/1.1 200 OK') et j'ai besoin de 'wp-load.php' pour essayer de le faire fonctionner. Sans succès.

1
Douglas Vargas

Comme indiqué dans les commentaires, vous avez un formulaire qui peut ne pas savoir où aller. En général, si vous avez un formulaire à soumettre, vous n'avez pas besoin de AJAX, car la variable action du formulaire gérera la soumission du formulaire ainsi que la page suivante. Si vous avez besoin de quelque chose dans la base de données avant si le formulaire est soumis (comme les tailles et les couleurs disponibles du produit sélectionné par l'utilisateur), alors AJAX est nécessaire. Comme nous ne pouvons pas voir le code du formulaire complet, nous ne pouvons le dire avec certitude, mais il est possible que vous n’ayez pas besoin de AJAX dans cette situation, et que vous utilisez AJAX. provoquant votre échec.

1
scott