0

同じ一般的な AJAX コードを使用するいくつかの連絡先フォームがあります。

$(document).ready(function() {
    $('#mainMail').submit( function() {
        $.ajax({
            type: "POST",

            url : "<?php echo home_url(); ?>/wp-content/themes/retlehs-roots-f45f4f5/assets/bin/process.php",
            data: $(this).serialize(),
            success: function() {
                    $('#enquiryBox #submitSuccess').removeClass('hidden');
                    setTimeout(function() { $("#enquiryBox #submitSuccess").addClass('hidden'); }, 15000);       
                },
            error: function() {
                $('#enquiryBox #submitFail').removeClass('hidden');
                setTimeout(function() { $("#enquiryBox #submitFail").addClass('hidden'); }, 15000);
            }
            });
        return false;
    });
});

つまり、フォームが正常に送信され、(process.php 経由で) メールが送信されると、#submitSuccessdiv は正常に表示されます。問題は、失敗するとdiv表示されることです(#submitFaildivは非表示のままです)。

これは、process.php が正常に呼び出されなかった場合にのみ ajax post の失敗が発生するためだと思いますか? 電子メールが process.php 経由で送信されない場合、ユーザーにエラー メッセージが表示されるように、これを調整する方法はありますか?

ここに私のprocess.phpコードがあります:

<?php 

$robotest = $_POST['robotest']; //just testin' for robots

$recipient = "info@mydomain.com"; //recipient 
$email = ($_POST['email']); //senders e-mail adress 

if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest == "")) { 

$Name = ($_POST['name']); //senders name 

$mail_body  = "Hello, \r\n \r\n";
$mail_body .= "You have received a new booking with the following details: \r\n\r\n";
$mail_body .= "{$_POST['comments']}; \r\n \r\n";
$mail_body .= "Please respond to the customer within 30 minutes on the following phone number: {$_POST['phone']} \r\n";
$mail_body .= "Warm regards, \r\n";
$mail_body .= "Robot. \r\n";



$subject = "Free Consult Inquiry"; //subject 
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields 

mail($recipient, $subject, $mail_body, $header); //mail command :) 

} else {
  print "You've entered an invalid email address!";
 }
?>

(これprint "you've entered an invalid email address!"はエラーメッセージに対する私の試みでしたが、それも機能していません...)

4

3 に答える 3

1

HTTP エラーコードを返すことでエラーを示すことができます。

} else {
  header("HTTP/1.1 500 Internal error");
  print "You've entered an invalid email address!";
 }
于 2012-11-12T23:23:56.267 に答える
1

$("#enquiryBox #submitSuccess").addClass('hidden');この行をエラー ブロックにも追加します。

  $.ajax({
        type: "POST",

        url : "<?php echo home_url(); ?>/wp-content/themes/retlehs-roots-f45f4f5/assets/bin/process.php",
        data: $(this).serialize(),
        success: function() {
                $('#enquiryBox #submitSuccess').removeClass('hidden');
                setTimeout(function() { $("#enquiryBox #submitSuccess").addClass('hidden'); }, 15000);       
            },
        error: function() {
            $('#enquiryBox #submitFail').removeClass('hidden'); //why do you remove class 'hidden' and add it later too ??
            $("#enquiryBox #submitSuccess").addClass('hidden'); //added line here
            setTimeout(function() { $("#enquiryBox #submitFail").addClass('hidden'); }, 15000);
        }
        });
于 2012-11-12T22:53:46.337 に答える
0

のマニュアル エントリjQuery.ajax()を読むと、プロトコル エラーまたはネットワーク エラーが発生したときにエラー イベントが発生することがわかります。スクリプトがfalsenullまたはそのようなものを返した場合でも、有効な応答と見なされるため、問題が発生します。

そのような場合、すべての呼び出しが 1 つのメソッドを呼び出すように記述し、エラー イベントが呼び出された場合は、再構築されたエラー メッセージで同じメソッドを呼び出すようにします。

于 2012-11-12T22:56:34.473 に答える