1

javascript 検証のあるメールフォームを作成しようとしています。フォームの値は ajax を使用して、データを電子メール アドレスに送信する php スクリプトに送信する必要があります。

ただし、php コード、succes、またはエラー jquery コールバックは呼び出されず、Chrome の JavaScript コンソールにはログがありません。

これは私の単純化されたhtmlページです:

<form id="mail-form">
    <div class="input-row">
    <div class="label"><label for="name">Your name: *</label></div>
    <div class="input"><input type="text" name="name" id="name" maxlength="50"/></div>
        <input id="submit-button" type="submit" value="send"/>
</form>

私のJavaScript:

$(document).ready(function () {
    var form = $("#mail-form");

    form.submit(function (e) {
        e.preventDefault();
        send(form);
    }
});

function send(form) {

    var formData = { name: $("#name").val(),
        email: $("#email").val(),
        phone: $("#phone").val(),
        message: $("#message").val(),
    };

    $.ajax({
        type: "POST",
        url: "/scripts/mailer.php",
        datatype: "text",
        data: formData,
        succes: function (data) {
            onSucces();
        },
        error: function () {
            onError();
        }
    });
}

そして私の単純化されたphpファイル:

$myemail = "someone@something.com";
$subject = "test";

$message = $_POST["message"];

mail($myemail, $subject, $message);

echo "ok";

誰かが私が間違っていることを指摘できますか? 簡単な get メソッドも試しましたが、サーバーにも到達しません。

4

3 に答える 3

2

JavaScript でこれを試してください。successが間違っていて、submit()呼び出しに無意味な括弧がありました:

$(document).ready(function () {
    var form = $("#mail-form");
    form.submit(function (e) {
        send(form);
        e.preventDefault();
        return(false);
    });
});
function send(form) {
    var formData = {
        name: $("#name").val(),
        email: $("#email").val(),
        phone: $("#phone").val(),
        message: $("#message").val(),
    };
    $.ajax({
        type: "POST",
        url: "/scripts/mailer.php",
        datatype: "text",
        data: formData,
        success: function(data){
            onSucces();
        },
        error: function(){
            onError();
        }
    });
}
于 2013-05-23T22:02:46.400 に答える
1

クライアント側でのデータ検証に頼るべきではありません。

あなたの質問に対して、アラートを使用して、成功またはエラーのコールバック関数が実行されていないことを確認してください。dataType を削除して、違いがあるかどうかを確認することもできます。

これを行うこともできます

var formData = form.serialize();

これの代わりに

var formData = { name: $("#name").val(),
    email: $("#email").val(),
    phone: $("#phone").val(),
    message: $("#message").val(),
};
于 2013-05-23T22:02:54.033 に答える
0

このようにしてみてください:

変化する:

$(document).ready(function () {
    var form = $("#mail-form");

    form.submit(function () {
        e.preventDefault();
        send(form);
        }
    });
});

に:

$("#mail-form").submit(function (e) {
        e.preventDefault();
        send(form);
});

したがって、次のようになります。

$("#mail-form").submit(function (e) {
        e.preventDefault();
        send(form);
});

function send(form) {

    var formData = { name: $("#name").val(),
        email: $("#email").val(),
        phone: $("#phone").val(),
        message: $("#message").val(),
    };

    $.ajax({
        type: "POST",
        url: "/scripts/mailer.php",
        datatype: "text",
        data: formData,
        success: function (data) {
            onSucces();
        },
        error: function () {
            onError();
        }
    });
}
于 2013-05-23T21:57:30.420 に答える