1

ユーザー データが有効かどうかに関係なく、成功メッセージが表示されます。エラー メッセージが表示されますが、表示に問題があります。私は最高のコーダーではないので、親切にしてください:)

また、何らかの理由でフォーム経由でメールを受信すると、ユーザーのメールが user@MISSING_DOMAIN として表示されます。私の最初の問題が優先されるので、これが多すぎる場合は、あなたが私を手伝う必要はありません.

フォームコード

<form action="contactformprocess3.php" method="post" class="myForm" >
<input name="name" type="text" id="f1" class="name-textinput"/><br />
    <script type="text/javascript">
        var f1 = new LiveValidation('f1');
        f1.add( Validate.Presence );
    </script>

<input name="email" type="text" id="f21" class="email-textinput"/><br />
    <script type="text/javascript">
        var f21 = new LiveValidation('f21');
            f21.add( Validate.Presence );
            f21.add( Validate.Email );
            f21.add( Validate.Length, { minimum: 10, maximum: 35 } );
    </script>

<textarea name="message" rows="9" cols="34" id="field3" class="message-textinput"></textarea>
    <span class="underform">
        <input type="reset" class="reset" />
        <input type="submit" value="submit" class="submit" />
    </span>
</form>

AJAX

$(function() {
$('.myForm').submit(function(e) {
    e.preventDefault();
    var form = $(this);
    var post_url = form.attr('action');
    var post_data = form.serialize();
    $.ajax({
        type: 'POST',
        url: post_url,
        data: post_data,
        success: function(msg) {
            $('.success-box').fadeIn("slow").delay(3000).fadeOut("slow");
        },
        error: function(xhr, status, error, req) {
            $('.failure-box').fadein("slow").delay(3000).fadeOut("slow");
        }

    });
  });
});

PHPメール

<?php
$to = 'wj@pieceofmedesigns.com';
$subject = 'Piece of Me Designs';
$from = $_POST['email'];
$name = $_POST['name'];
$message = $_POST['message'];

if (mail($to, $subject, $message, 'From: '.$name.' &lt;'.$from.'&gt;')) {
    echo 'Message was sent successfully.';
} else {
    echo 'There was a problem sending your message.';
}

?>

4

2 に答える 2

2

エドの言ったことは完全に正しい。これは、ajax ブロックの "error:" 部分で待機していることを意味します。これは、ビジネス ルールの機能不全 (電子メールが送信されない) であり、このブロックには技術的なエラーのみが表示されます。

ビジネス エラーは、技術的な観点からは「成功」を返します。それは、アプリケーションが処理しなければならない別の「成功」の答えです。

したがって、基本的にあなたにとって解決策はエコーをチェックすることです:

success: function(msg) {
    if (msg == 'Message was sent successfully.') {
       $('.success-box').fadeIn("slow").delay(3000).fadeOut("slow");
    } else {
       $('.failure-box').fadein("slow").delay(3000).fadeOut("slow");
    }
},
error: function(xhr, status, error, req) {
    //alert the user there was a technical problem
}

PHP サービスから XML ベースのエコーを返すことをお勧めします。そうすれば、タグと正規化された応答をより簡単に管理できます。

于 2012-06-04T02:13:35.487 に答える
1

AJAX エラー状態は、サーバーに接続できない場合、またはサーバーが 200 以外のステータス コードを返した場合に発生します。このような状況には、ファイルが見つからない、スクリプト エラー、またはネットワークの問題があります。

したがって、正しいメッセージを取得するには、データを検証する必要があります。AJAX を使用する前にこれを実行して、サーバー スクリプトに送信するデータが検証されていることを確認できます。

また、検証を行うには PHP スクリプトを取得する必要があります。これは、セキュリティを確保するための優れたポリシーです。

于 2012-06-04T02:05:29.997 に答える