web-dev-qa-db-ja.com

jQuery Ajaxが正しい応答を返しましたが、404エラーにリダイレクトされた後

HTMLでは、私のFORM action = ""とmethod = "POST"です。

私の電話で私は持っています:

    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);
        }); 

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();  }

すべて正常に実行されます。 3つのアラートが表示されます。ajaxの実行前に1回、実行(完了/完了)後に2回です。しかし、3番目のものの後に、見つけられない404ページを開いています。私はこの問題なしで他のajax呼び出しをしました、そしてヘッダー( 'HTTP/1.1 200 OK')を含めて、それを動作させるためにここで 'wp-load.php'が必要です。成功せずに。

1
Douglas Vargas

コメントで述べたように、あなたはどこへ行くべきかわからないかもしれないフォームを持っています。一般に、送信するフォームがある場合は、フォームのactionがフォーム送信と次のページを処理するため、AJAXは必要ありません。データベースから何かが必要な場合 以前 フォームが送信される場合(ユーザーが選択した商品の利用可能なサイズと色など)、AJAXが必要です。フォーム全体のコードを見ることができないので、確実に言うことはできませんが、この状況ではAJAXを必要としない可能性があり、AJAXを使用することが失敗の原因です。

1
scott