1

次の PHP/Ajax の問題があり、現在、関連する同様の質問が見つからないようです。メールがフォームから正常に送信されるサイトがありますが、スクリプトの Ajax 部分が正しく呼び出されません。正常に動作すると、ユーザーが送信をクリックすると、フォーム検証のために Ajax スクリプトが呼び出されます。この部分は機能し、電子メールが送信されますが、送信ウィンドウを閉じて感謝を伝えるために電子メールを送信した後、Ajax スクリプトが呼び出されないなどの問題があります。

私の問題は、Ajax スクリプトの成功部分を呼び出すコード行が PHP のどこかに欠けていることだと思います。

スクリプトは以下に添付されています。

PHPコード

<?php 
 $emailTo = myemail@gmail.com';
 $subject=$_REQUEST['subject'];
 $name=$_REQUEST['name'];
 $email=$_REQUEST['email'];
 $msg=$_REQUEST['message'];

 $body = "Name: $name \n\nEmail: $email \n\nMessage: $msg";
 $headers = 'From: '.$name.' <'.$email.'>' . "\r\n" . 'Reply-To: ' . $email;

 mail($emailTo, $subject, $body, $headers); 

?>

Ajax コード

$.ajax({
   type: "POST",
   url: "email.php",
   data: params,
   success: function(response){
    if(response){
     var responseObj = jQuery.parseJSON(response);
     if(responseObj.ResponseData)
      alert(responseObj.ResponseData);
    }
    ResetInput();
    $('#submitButton').removeAttr('disabled');
    ClosePopupWindow();
   },

必要に応じて、完全な Ajax コードは次の要点にあります - https://gist.github.com/4117065

4

3 に答える 3

2

エラーを追跡するためにこれを行うことをお勧めします:

PHPで:

if (mail($emailTo, $subject, $body, $headers)){
    echo "success";
} else {
    echo get_last_error();
}

jqで:

if(response == "success"){
   //do your stuff
} else {
   //track the error
   alert(response);
   console.log(response); // you can chose either way, console.log() is the new black xD
}

私は最近 ajax/php をよく使っていましたが、ほとんどの場合 ajax が機能しないのは、php が何らかのばかげたエラーをスローしたためです :P

于 2012-11-20T10:54:15.547 に答える
0

.php ファイルで、メールがエラーなしで送信されたかどうかをテストします (bool http://php.net/manual/en/function.mail.php$response = mail(...を返します) json_encode($response['ResponseData'] = $success); 。js では、存在しないメンバーを参照しています。 : 応答データ

于 2012-11-20T10:50:17.193 に答える
0

PHPスクリプトは何もエコーしないため、応答はnullです.PHPで応答として何かをエコーすることができます.コードは機能します

于 2012-11-20T10:51:17.940 に答える