- ベストアンサー
jqueryでAJAX非同期通信をしてphpからメールを送信する
- jqueryを使用してAJAX非同期通信を行い、phpからメールを送信します。
- 送信が完了した後には、lightbox風のメッセージを表示します。
- sendmail.phpにpostでフォームの内容を渡す方法と、sendmail.phpの$msgを表示する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> メール送信できるのですが、#messageのvalue値がsendmail.phpに渡りません。 index.php の方の記述ミスを見過ごしてました。 動作チェックはしてませんが、おそらく > data : ({ message: $('#message').val()},{off:$('#exeBtn').val()}), これを > data : { message: $('#message').val(), off:$('#exeBtn').val()}, にすればいけると思います。
その他の回答 (1)
- mtaka2
- ベストアンサー率73% (867/1179)
受け取り側処理部で <?=$msg?> としてしまうと、 ブラウザに渡った時点で、最初のPHPスクリプト実行時点での変数$msgが埋め込まれてしまいます。 そうではなく、JavaScript のコードとして、「ajax の実行結果」を処理する必要があります。 あと、中括弧とかの対応があやしかったので、ちょっと書き換えましたが、 以下のような感じでしょうか。 --index.phpここから--- (略) //<![CDATA[ $(function(){ $("#exeBtn").click(function() { $.ajax({ url : "ajax.php", type : "post", data : ({ message: $('#message').val()},{off:$('#exeBtn').val()}), datatype:'text', success: function(data) { if(data != ''){ alert(data); }}, }); }); }); //]]> (略) --index.phpここまで--- --sendmail.phpここから--- <?php header('Content-Type: text/plain; charset=UTF-8'); $off=$_POST["off"]; $body = stripslashes($_POST['message']); if ($off != ""){ $to = "hogehoge@hogehoge.co.jp"; $subject = "報告"; $subject = mb_convert_encoding($subject,"JIS","utf-8"); $subject = mb_encode_mimeheader($subject, "ISO-2022-JP" ); $body = mb_convert_encoding($body,"JIS","utf-8"); $ret = mb_send_mail($to,$subject,$body); if($ret){ $msg = '送信しました'; }else{ $msg = '送信失敗しました'; } } echo $msg; ?> --sendmail.phpここまで---
お礼
すいません。間違えて補足してしまいました。回答ありがとうございます。 ------index.php------------------------------------------------------------- <script type="text/javascript"> //<![CDATA[ $(function(){ $('#exebtn').click(function() { $.ajax({ type: "POST", url : "sendmail.php", data : ({message:$('#message').val()},{exebtn:$('#exebtn').val()}), datatype:'text', success: function(data) { if(data != ''){ alert(data); }}, }); }); }); //]]> </script> </head> <body> <form> <input id="message" type="hidden" name="message" value="entrytitle"/> <input id="exebtn" type="button" name="exebtn" value="報告"/> </form> ----------------------------------------------------------------------------- ------sendmail.php---------------------------------------------------------------- <?php header('Content-Type: text/plain; charset=UTF-8'); $off=$_POST["exebtn"]; $body = stripslashes($_POST['message']); if ($off != ""){ $to = "hogehoge@hoge.jp"; $subject = "報告"; $subject = mb_convert_encoding($subject,"JIS","utf-8"); $subject = mb_encode_mimeheader($subject, "ISO-2022-JP" ); $body = mb_convert_encoding($body,"JIS","utf-8"); $ret = mb_send_mail($to,$subject,$body); if($ret){ $msg = '送信しました'; }else{ $msg = '送信失敗しました'; } } echo $msg; ?> ----------------------------------------------------------------- メール送信できるのですが、#messageのvalue値がsendmail.phpに渡りません。 firebugでsendmail.phpのPOSTを見たらexebtnに「報告」とありましたがmessageは、ありませんでした。 もちろん送信されたメールにもmessageは送られていません。 ここが間違っているんでしょうか? > data : ({ message: $('#message').val()},{off:$('#exeBtn').val()}), それともsendmail.phpのここが間違っているのでしょうか? > $body = stripslashes($_POST['message']); 原因がまったく解かりません。 ご教授お願いします。
補足
メール送信成功時は「送信しました」とアラートが出て、メールも送信されました。ですが、メールの本文が送信されませんでした。 メール送信失敗時には、アラートが出ませんでした。
お礼
出来ました。 本当にありがとうございました。