0

フォームを送信するこの方法を採用しようと苦労しています。JSONを使用して、ここで何が起こっているのかを理解しようとしています...しかし、本当に明白な何かが欠けているように感じます...これを機能させたいと思っています。ありがとうございました!

これがHTMLです

<div class="span4">
        <div id="formResponse"></div>
        <form id="contactForm" name="contactForm" method="post">
        <div class="controls">
            <input class="span4" type="text" name="name" id="name" placeholder="Name" required />
        </div>
        <div class="controls">
            <input class="span4" type="email" name="email" id="email" placeholder="E-mail" required />
        </div>
        <div class="controls">
            <textarea rows="3" class="span4" name="message" id="message"placeholder="Leave your message at the beep..."></textarea>
        </div>
        <div class="controls">
            <input type="submit" class="btn btn-primary" name="formSubmit" id="formSubmit" value="Send E-Mail" />
        </form>
        </div>          
        </div>

jQueryは次のとおりです。

    <script type="text/javascript">
$(document).ready(function(){

    $('#contactForm').submit(function(){

        $.ajax({
            type: "POST",
            url: "php/contact.php",
            data: $("#contactForm").serialize(),
            dataType: "json",

                success: function(msg){
                $("#formResponse").removeClass('error');
                $("#formResponse").removeClass('success');
                $("#formResponse").addClass(msg.status);
                $("#formResponse").html(msg.message);

            },
            error: function(){
                $("#formResponse").removeClass('success');
                $("#formResponse").addClass('error');
                $("#formResponse").html("There was an error submitting the form. Please try again.");
            }
        });
    });
});
</script>

PHPは次のとおりです。

function checkEmail($email){

if(eregi("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $email)){
    return FALSE;
}

list($Username, $Domain) = split("@",$email);

if(@getmxrr($Domain, $MXHost)){
    return TRUE;

} else {
    if(@fsockopen($Domain, 25, $errno, $errstr, 30)){
        return TRUE;
    } else {

        return FALSE;
    }
}
}   

$response_array = array();

if(empty($_POST['name'])){

//set the response
$response_array['status'] = 'error';
$response_array['message'] = 'Name is blank';

} elseif(!checkEmail($_POST['email'])) {

//set the response
$response_array['status'] = 'error';
$response_array['message'] = 'Email is blank or invalid';

} elseif(empty($_POST['message'])) {

$response_array['status'] = 'error';
$response_array['message'] = 'Message is blank';

} else {

//send the email
$body = $_POST['name'] . " sent you a message\n";
$body .= "Details:\n\n" . $_POST['message'];
mail($_POST['email'], "SUBJECT LINE", $body);

//set the response
$response_array['status'] = 'success';
$response_array['message'] = 'Email sent!';

}

echo json_encode($response_array);
4

2 に答える 2

1

何が機能していないかを指定していませんが、デフォルトのフォーム送信動作を妨げていないことがすぐにわかります。これは問題です。

$('#contactForm').submit(function (e) {
    e.preventDefault();

これにより、フォームが正常に送信されなくなり、代わりにajaxが使用されます。私は他に不利なことは何も見ていません。

于 2013-02-08T17:35:53.077 に答える
1

削除することもできます <input type="submit" class="btn btn-primary" name="formSubmit" id="formSubmit" value="Send E-Mail" />

と置き換えます <input type="button" class="btn btn-primary" name="formSubmit" id="formSubmit" value="Send E-Mail" />

これをjqueryで使用します:-

$('#formSubmit')。click(function(){});

それ以外の:-

$('#contactForm')。submit(function(){});

これにより、フォームのデフォルトの投稿動作が妨げられます。次に、ローカルホストでコードを実行している場合は、php mail()関数を使用するためにメールサーバーがインストールされていることを確認してください。

于 2013-02-08T19:23:32.597 に答える