jQuery $.ajax JSON形式のPOSTでフォーム内容を送信し、送信先のPHPでメール送信させるプログラムをかいているのですが、どうしても$.ajaxのerrorが呼び出される状況です。errorが呼び出されますが、PHPの方のメール送信はできております。
PHP側の出力がうまくいっていないのではないかと思いますが、原因がわかりません。どなたかご教授いただけないでしょうか?宜しくお願いします。
---js---
$("#send").click(function(){
var NAME = $('#name').val();
var EMAIL = $('#email').val();
var TITLE = $('#titlel').val();
var COMMENT = $('#comment').val();
$.ajax({
url : "sendmail.php",
dataType : "json",
data : {name:NAME, email:EMAIL, title:TITLE, comment:COMMENT},
type : "post",
success : function(data){
if(data != ''){
alert(data.result);
}
},
error : function(){
alert("通信に失敗しました。");
}
});
});
---sendmail.php---
if($_SERVER["REQUEST_METHOD"] != "POST"){
header("HTTP/1.0 404 Not Found");
return;
}else{
//メール送信処理 (省略)
$message = "送信完了メッセージ";
$result = array('result' => $message);
echo json_encode($result);
}
No.5ベストアンサー
- 回答日時:
解決案です。
$("#send").click(function(){
を
$("#inputForm").submit(function(){
に変える
});
});
});
</script>
を
});
return false;
});
});
</script>
に変える
以上でお試し下さい。
この回答への補足
ありがとうございます!正常にsuccessが返ってくるようになりました!
解決策がみつからず困惑していたので本当に感謝しております。
色々と勉強になりました。ありがとうございました!
No.4
- 回答日時:
>AJAXで書き換えたページ(index.php#mail.php)内でさらにajaxでPOST送信しているためうまく通信がいっていないのではないかと。
。。HTMLファイルに問題あるなら、
その部分のソースがないと判断しづらいかと思うのですが。
しかし、送信がうまくいってるのに受け取りでエラーというのは変ですねえ。
単純に、通信だけさせる新しいHTMLファイルを作って、
そのHTMLから通信したらどうなります?
この回答への補足
formだけの新しいHTMLファイルで同じようにsendmail.phpに$.ajaxでPOST送信してみましたが、同じようにalert("通信に失敗しました。")が出力されました。やはりメールは送信されています。
以下、HTMLファイルです。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- Ajax mail(contact) -->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5 …
<script>
$(function(){
$("#send").click(function(){
var NAME = $('#name').val();
var EMAIL = $('#email').val();
var TITLE = $('#mail-title').val();
var COMMENT = $('#comment').val();
$.ajax({
url : "sendmail.php",
dataType : "json",
data : {name:NAME, email:EMAIL, title:TITLE, comment:COMMENT},
type : "post",
success : function(data){
if(data != ''){
alert(data.result);
}else{
alert("empty callback");
}
},
error : function(){
alert("通信に失敗しました。");
}
});
});
});
</script>
</head>
<body>
<div id="inner">
<form method="post" id="inputForm">
<div class="item">
<div class="text-box">
<img src="images/contact/name.gif" alt="NAME" />
</div>
<div class="input-box">
<input type="text" size="30" id="name" name="name" />
</div>
</div>
<div class="item">
<div class="text-box">
<img src="images/contact/email.gif" alt="EMAIL" />
</div>
<div class="input-box">
<input type="text" size="30" id="email" name="email" />
</div>
</div>
<div class="item">
<div class="text-box">
<img src="images/contact/title.gif" alt="TITLE" />
</div>
<div class="input-box">
<input type="text" size="30" id="mail-title" name="title" />
</div>
</div>
<div class="item">
<div class="text-box">
<img src="images/contact/message.gif" alt="MESSAGE" />
</div>
<div class="input-box">
<textarea rows="5" cols="40" id="comment" name="comment"></textarea>
</div>
</div>
<div class="button-box">
<div class="button-left">
<input type="image" name="submit" id="send" value="送信" src="images/contact/next-off.gif" alt="送信" />
</div>
</div>
</form>
</div>
</body>
</html>
No.3
- 回答日時:
>JSON以外の余計な文字列というのはどういうものでしょうか?
{"result":"\u9001\u4fe1\u5b8c\u4e86\u30e1\u30c3\u30bb\u30fc\u30b8"}
以外に出力された文字ということです。
aaa{"result":"\u9001\u4fe1\u5b8c\u4e86\u30e1\u30c3\u30bb\u30fc\u30b8"}
では通信でエラーになります。
これはPHP側で意図して出力した文字列のみを対象とするものではなく、
たとえば、PHPエラーの記載などが原因となることもあります。
今は、どの段階でエラーが発生しているのかを
特定するのが先決だと思うので、その為に、単純に
$message = "送信完了メッセージ";
$result = array('result' => $message);
echo json_encode($result);
とだけ書かれたPHPと通信してみてはいかが。と記載したわけです。
上記の3行のPHPとの通信で
alert(data.result)が出力 → sendmail.phpに問題
alert("通信に失敗しました。")が出力 → 通信の指定に問題
と問題点を絞ることができます。
絞ることができれば、その部分を修正してみればいいわけです。
ということで、まずは3行のPHPとajax通信してみてはいかがでしょう。
この回答への補足
なるほど。ありがとうございます。
$message = "送信完了メッセージ";
$result = array('result' => $message);
echo json_encode($result);
の3行のPHPに送信してみましたが、alert("通信に失敗しました。")が出力されています。
通信そのものに問題があるようです。
AJAXで書き換えたページ(index.php#mail.php)内でさらにajaxでPOST送信しているためうまく通信がいっていないのではないかと。。。
色々とお手数おかけします。
No.2
- 回答日時:
ローカルで試してみましたが、私の環境では正常に取得できました。
sendmail.phpでJSON以外の余計な文字列が含まれていることは考えられませんか?
今回作成した3行のPHPをajaxで通信して
正常に表示されるならsendmail.phpに問題があるということですよね。
この回答への補足
ご丁寧な回答感謝します。ありがとうございます。
JSON以外の余計な文字列というのはどういうものでしょうか?
たいへん恐縮ですが、下記にsendmail.phpを記載しておきますので問題があればご指摘いただければ幸いです。
sendmail.phpは以下の通りです。宜しくお願いします。
---sendmail.php---
<?php
require_once("includes/common.php");
if($_SERVER["REQUEST_METHOD"] != "POST"){
//POST以外ははじく
header("HTTP/1.0 404 Not Found");
return;
}else{
// POSTされたデータをチェック
$_POST = checkInput($_POST);
// 変数にセッション変数を代入
$name = $_POST['name'];
$email = $_POST['email'];
$title = $_POST['title'];
$comment = $_POST['comment'];
$comment_all = <<<EOF
お問い合わせ
From:$name
Mail:$email
Title:$title
------------------------------------------------------------
$comment
EOF;
//以下、PEARのmailで送信処理
// mb_encode_mimeheader用エンコードの設定
mb_language("japanese");
mb_internal_encoding("UTF-8");
require_once 'Mail.php';
require_once 'Mail/mime.php';
// (1) Mail_Mimeクラスのインスタンス化
$mime = new Mail_Mime("\n");
// (2) テキスト本文の設定
$mime->setTxtBody( $comment_all );
// (3) 添付ファイルの指定($upfileが存在する場合のみ)
$filename = "images/upload/" . $upfile;
if(!$upfile == ""){
$mime->addAttachment("images/upload/" . $upfile, "MIME_Type::autoDetect($filename)");
}else{
}
// (4) メッセージの設定
$bodyParam = array(
"head_charset" => "ISO-2022-JP",
"text_encoding" => "ISO-2022-JP",
"text_charset" => "UTF-8"
);
// (5) メッセージを構築
$body = $mime->get($bodyParam);
$addHeaders = array(
'From' => $email,
'To' => SHOP_EMAIL,//メール宛先
'Subject' => mb_encode_mimeheader('[Contact to XXXX]' . $title)
);
// (6) ヘッダ行を構築
$headers = $mime->headers($addHeaders);
$params = array(
'host' => HOST,//SMTPサーバー
'port' => 587,
'auth' => true,
'username' => USERNAME,//メールアカウント
'password' => PASSWORD //パスワード
);
$recipients = SHOP_EMAIL;//メール宛先
$smtp = Mail::factory( 'smtp', $params );
$e = $smtp->send( $recipients, $headers, $body );
// 送信結果をお知らせする変数を初期化
$message = '';
if(PEAR::isError($e)){
$message = '送信に失敗しました。';
}else{
$message = 'メッセージは送信されました。ありがとうございました。';
}
$result = array("result" => $message);
echo json_encode($result);
}
?>
No.1
- 回答日時:
情報が少ないので、原因は特定しづらいですが、
sendmail.phpの文字コードはなんでしょう?
json_encodeは確かUTF-8の文字列でなければ変換できなかったと思います。
もしも、UTF-8以外の文字コードでsendmail.phpが書かれているなら、
$messageの文字コードをUTF-8に変換してあげることで解決するかもしれません。
他に考えられるとしたら、json_encodeが使えない環境。
PHP5.2以上でなければ使用できなかったと思います。
エラー表示、または何も出力されない場合、JS側でもエラーになると思います。
とりあえず、
$message = "送信完了メッセージ";
$result = array('result' => $message);
echo json_encode($result);
だけ書かれたPHPを作って、表示してみて、
正常に書き出されているか確認すると良いかもしれません。
この回答への補足
ご回答ありがとうございます。
ご指摘のような
$message = "送信完了メッセージ";
$result = array('result' => $message);
echo json_encode($result);
だけのphpを作り試したところ、
{"result":"\u9001\u4fe1\u5b8c\u4e86\u30e1\u30c3\u30bb\u30fc\u30b8"}
と、正常に出力しているようです。
PHPは5.3.0です。
あと、ajaxで書き換えたページ内でajaxを利用し、POSTしています。
コールバックを受け取る際、そこに問題がある可能性があるのではないかと思いますが知識がないためわかりません。
何か糸口をご存じであればご指導お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
AJAX
-
[JavaScript] preven...
-
【JavaScript】confirmのボタン...
-
saved from url=(0013)abou
-
JK-FFを使う非同期10進・2進カ...
-
【Ajax】改行を含めたデータを...
-
DirectXとOpenGLはどちらが動作...
-
ExcelVBAで非同期のsocket通信...
-
JQuery サーバー上にアップする...
-
リンクを押すとEXEファイルを実...
-
HTMLでDBからデータを表形式で...
-
webシステムでchrome
-
Ajaxでsessionにいれた値が引き...
-
PHPにコネクションプールってあ...
-
ASP.NET(VB)VBソースからJavas...
-
データ受け渡しについて
-
c# WebBrowserの通信のキャプチャ
-
ASP.NET 動的に行を増やすTable
-
大量のデータを表として展開す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
json形式データのデータ連携に...
-
以下のようなjsonファイルで、"...
-
jQuery.msgBoxでのthisの使用に...
-
gulpfile.jsとpackage.jsonの読...
-
http上でrequest されたxmlファ...
-
jQuery $.ajax JSON形式のPOST
-
Ajaxでデータベース更新
-
jQuery.getでレスポンスデータ...
-
VSCodeにて「終了タグ」の背景...
-
フォームからjQuery,jQuery.jso...
-
教えてください!html5.jpを使...
-
【JavaScript】confirmのボタン...
-
HTMLでDBからデータを表形式で...
-
DirectXとOpenGLはどちらが動作...
-
saved from url=(0013)abou
-
ASP.NET(VB)VBソースからJavas...
-
ローカル用HTMLファイルの安全...
-
非同期関数とノンブロッキング...
-
AJAX通信が終わるまで次の処理...
おすすめ情報