出産前後の痔にはご注意!

jqueryでAJAX非同期通信をしてphpからメールを送信する。送信完了後にlightbox風に「送信しました」と表示させたい。
sendmail.phpにpostでフォームの内容が渡りません。どうやってsendmail.phpに値を渡して
sendmail.phpの$msgを戻して、表示させるのでしょうか?
素人です。1週間ほど調べましたが、これが限界でした。
宜しくお願いします。

index.php

<script type="text/javascript" src="jquery-1.3.2.js"></script>
<script type="text/javascript">
//<![CDATA[
$(function(){
$("#exeBtn").click(function() {
$.ajax({
url : "sendmail.php",
type : "post",
data : ({ message: $('#message').val(),{off:$('#exeBtn').val()}),
datatype:'json',
success: function(
dispMsg(){
if('<?=$msg?>' != ''){
alert('<?=$msg?>');
}
}},
});
});
});
//]]>
</script>
</head>
<body>
<form>
<input id="message" type="hidden" name="message" value="EntryTitle"/>
<input id="exeBtn" type="button" name="off" value="リンク切れ" />
</form>
</body>
</html>

sendmail.php

<?php
header(’Content-Type: text/xml; 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");
$body=mb_convert_encoding($body,"JIS","utf-8");
$ret = mb_send_mail($to,$subject,$body);
if($ret){
$msg = '送信しました';
}else{
$msg = '送信失敗しました';
}
}
}
?>

A 回答 (2件)

> メール送信できるのですが、#messageのvalue値がsendmail.phpに渡りません。



index.php の方の記述ミスを見過ごしてました。
動作チェックはしてませんが、おそらく
> data : ({ message: $('#message').val()},{off:$('#exeBtn').val()}),
これを
> data : { message: $('#message').val(), off:$('#exeBtn').val()},
にすればいけると思います。
    • good
    • 0
この回答へのお礼

出来ました。

本当にありがとうございました。

お礼日時:2010/02/07 15:07

受け取り側処理部で <?=$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ここまで---

この回答への補足

メール送信成功時は「送信しました」とアラートが出て、メールも送信されました。ですが、メールの本文が送信されませんでした。
メール送信失敗時には、アラートが出ませんでした。

補足日時:2010/02/04 15:03
    • good
    • 0
この回答へのお礼

すいません。間違えて補足してしまいました。回答ありがとうございます。

------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']);

原因がまったく解かりません。

ご教授お願いします。

お礼日時:2010/02/05 22:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qテキストボックス入力を半角英数字に制限する

よろしくお願いします。

テキストボックスに入力される文字を、
半角英数字(英語の場合は大文字のみ)以外入力できないように制限したいのですが可能でしょうか?

もしくは半角英数字以外が入力された場合アラートを出すようにしたいのですが。。。

また、文字数の制限も可能でしょうか?

第一希望)
12文字以内の半角英数大文字以外入力できないように入力制限する。

第二希望)
12文字以内の半角英数大文字以外入力の文字が入力されている状況でボタン(=CGI実行)を押すと警告のアラートが出る。

第三希望)
半角英数大文字以外入力できないように制限、もしくはアラート表示。

例)
AAAA-1234567 ○(ハイフンを含め12文字以内の半角英数字)
AAAA-123456789 ×(12文字以内でない)
aaaa-1234567 ×(小文字が含まれている)


webサーバー・・・HP-UX
web・・・IE6
開発端末・・・windows2000(Tera Term 使用)

情報をお持ちの方いらっしゃいましたら、
よろしくお願いいたします。

よろしくお願いします。

テキストボックスに入力される文字を、
半角英数字(英語の場合は大文字のみ)以外入力できないように制限したいのですが可能でしょうか?

もしくは半角英数字以外が入力された場合アラートを出すようにしたいのですが。。。

また、文字数の制限も可能でしょうか?

第一希望)
12文字以内の半角英数大文字以外入力できないように入力制限する。

第二希望)
12文字以内の半角英数大文字以外入力の文字が入力されている状況でボタン(=CGI実行)を押すと警告のアラートが...続きを読む

Aベストアンサー

第二希望の条件について。
前提としてチェックするテキストボックスのnameがtxtであった場合の説明をします。
まず、次のようにform開始タグにname="fm"とonsubmit="return checkForm()"を追加します。

<form name="fm" action="********.cgi" method="post" onsubmit="return checkForm()">


次に以下を<head>~</head>に貼り付けることで、JavaScriptによる送信前のチェックが可能です。

---------------------------------------
<script type="text/javascript">
<!--
function checkForm(){
var str = document.fm.txt.value;
if (str.match(/[^A-Z\d\-]/)) {
alert("半角英数字(大文字)しか入力できません");
return false;
}
else if (str.length > 12) {
alert("12文字以内で入力してください");
return false;
}
}
//-->
</script>
---------------------------------------

「ハイフンを含め」と書いているので、ハイフンを入れても有効なようにしました。
また、12文字以内としか書かれていないので0文字でも警告が出ないようになっています。
もし、何も入力されていない場合でも警告を出すならば、次のようにしてください。

---------------------------------------
if (!str) {
alert("何も入力されていません");
return false;
}
else if (str.match(/[^A-Z\d\-]/)) {
alert("半角英数字(大文字)しか入力できません");
return false;
}
else if (str.length > 12) {
alert("12文字以内で入力してください");
return false;
}
---------------------------------------

第二希望の条件について。
前提としてチェックするテキストボックスのnameがtxtであった場合の説明をします。
まず、次のようにform開始タグにname="fm"とonsubmit="return checkForm()"を追加します。

<form name="fm" action="********.cgi" method="post" onsubmit="return checkForm()">


次に以下を<head>~</head>に貼り付けることで、JavaScriptによる送信前のチェックが可能です。

---------------------------------------
<script type="text/javascript">
<!--
function checkForm(){
...続きを読む


人気Q&Aランキング