2017-11-28 28 views
1

WordpressのネイティブのPHPMailerクラスとAjaxを使用して連絡先情報を電子メールで送信しようとしています。ここに関連するコードです:PHPがjQueryのserialize()からデータを取得できません

jQuery(document).ready(function() { 
    jQuery('#formContato').submit(ajaxSubmit); 

    function ajaxSubmit() { 
    var newCustomerForm = jQuery('#formContato').serialize(); 

    jQuery.ajax({ 
     type: "POST", 
     url: "<?php echo site_url(); ?>/wp-admin/admin-ajax.php", 
     data: { 
     action: 'sendmail', 
     newCustomerForm 
     }, 
     success: function(data) { 

     jQuery("#alertaOk").show(); 
     console.log(data); 
     console.log(newCustomerForm); 
     }, 
     error: function(errorThrown) { 

     jQuery("#alertaErro").show(); 
     console.log(errorThrown); 
     } 
    }); 
    return false; 
    } 
}); 
#alertaOk { 
    display: none; 
} 

#alertaErro { 
    display: none; 
} 
<form id="formContato" method="post"> 
    <div class="row"> 
    <div class="col-sm-6 form-group"> 
     <input class="form-control" id="name" name="name" placeholder="Nome" type="text" required> 
    </div> 
    <div class="col-sm-6 form-group"> 
     <input class="form-control" id="email" name="email" placeholder="E-mail" type="email" required> 
    </div> 
    </div> 
    <textarea class="form-control" id="comments" name="comments" placeholder="Mensagem" rows="5"></textarea><br> 
    <div class="row"> 
    <div class="col-sm-12 form-group"> 
     <button class="btn btn-default pull-left btn-laranja" type="submit">Enviar</button> 
    </div> 
    </div> 
    <div id="alertaOk" class="alert alert-success"> 
    <strong>Obrigado!</strong> Recebemos sua mensagem e entraremos em contato em breve. 
    </div> 
    <div id="alertaErro" class="alert alert-danger"> 
    <strong>Algo deu errado.</strong> Nossos administradores já foram avisados, por favor envie sua mensagem para o e-mail <a href="[email protected]">[email protected]</a> . 
    </div> 
</form> 

はアヤックスphpmailerのを呼び出すのWordpressののfunctions.phpファイル内の関数にデータを送信します。 phpmailerのを初期化する前に私はこのようなAjaxデータ取得しています:

$nome = trim($_POST['name']); 
$mensagem = trim($_POST['comments']); 
$email = trim($_POST['email']); 

をして、電子メールの本文にそれを印刷しようとしている:

$mail->Body = "Nome: " . $nome . "\nE-mail: " . $email . "\nMensagem: " . $mensagem; 

PHPは、私がテストメールを受信、ちょうど右の機能を実行しますしかし、それはAjax呼び出しからデータを受け取っていません。コンソールにシリアル化されたデータが表示されています。これは間違っていないことを意味しますが、何とかPHPスクリプトに到達していません。私はそれがWordpressに関連するものと思われる。

ありがとうございます。

+1

シリアル化されたデータに名前を付ける必要はありませんか?アクション: 'sendmail'、newCustomerForm:newCustomerForm –

+0

@FunkDocいいえ... https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#New_notations_in_ECMAScript_2015 – chiliNUT

答えて

1

あなたnewCustomerFormdataにキーを持っている必要がある。

data: { 
    action: 'sendmail', 
    custForm: newCustomerForm 
} 

そして、あなたのPHPファイルで、あなたはcustForm文字列を解析する必要があります。

parse_str($_POST['custForm'], $form); 
//Then access the custForm data using $form, e.g. $form['name'] 
+0

あなたは 'parse_str'でお金を稼いでいますが、' data: 'オブジェクトは書かれたとおりにうまくいきました。' newCustomerForm'にキーを与える必要はありません。実際には – chiliNUT

+0

!ありがとうございました! – rschpdr

0

「パラメータ」の2つの異なるタイプを同時に渡すことはできません。シリアル化されたデータを渡すか、各要素によって渡します。シリアル化する前に、アクションをnewCustomerFormに入れてください。 だから、

data: { 
    action: 'sendmail', 
    newCustomerForm 
    }, 

data: newCustomerForm, 
+0

これは間違っています。唯一の問題は 'newCustomerForm'にキーがないことです。 As @Funk Docはコメントしました。 – imtheman

+0

newCustomerFormはシリアル化された配列なので、キーは必要ありません。しかし、彼は1つのエントリを配列に混ぜて配列として扱います。彼はデータを渡す方法とPHPの読み方を変更する必要があります。私はJavascriptの方法で行った。 – Forbs

関連する問題