私は本当にシンプルなものを見逃しているように感じるので、私は頑固なものを乗り越えて、もう時間を無駄にするのではなく、実際にここで質問します。私のjavascriptを破った場合は
私は個人的なブログを作成し始めました(個人的な挑戦とそれの学習経験のために)、私は電子メールの検証のためのコードを書いています。標準は、トークン&電子メールGET変数と電子メールを送信します。 (hooray)は正しく動作しますが、バックエンドに電子メールの検証を追加することに決めたときに導入された問題が1つあります。 ajaxの呼び出しは成功し、正しい文字列を返します。しかし、いったん私は別のif文をjavascriptに追加して、無効な電子メールのエラーメッセージが表示される(または強制される)ことを処理するようにすると、かっこがないように見えます。私の警告の成功/失敗はfalseに設定され、ユーザに表示される文字列も私が意図したとおりではありません。ここに私のコードと説明するスクリーンショットがあります: * if..elseをスイッチに変更して、何かを変更するかどうかを確認しました。
//JAVASCRIPT
$("form").submit(function(event) {
if(request) request.abort;
var message = "";
var success = false;
var formMessageBox = document.getElementById("form-message");
var form = $(this);
var inputs = form.find("input");
var data = inputs.serialize();
inputs.prop("disabled", true);
request = $.ajax({
url: "php/form.php",
type: "post",
data: data
});
request.done(function(data) {
var submission = data;
switch (submission) {
case "success":
message = "You're good to go! You'll be receiving an email shortly from <strong>my_email</strong>, just to make sure everything's in the green";
$("form").innerHTML = "";
success = true;
break;
case "fail":
message = "Seems this email is already in my database; you may have submitted twice, or somebody might have hijacked your email--don't worry, it's more than likely the former.";
success = false;
break;
default:
message = submission;
success = false;
break;
}
});
request.always(function() {
inputs.prop("disabled", false);
if(success) {
formMessageBox.classList.add("alert-success");
if (formMessageBox.classList.contains("alert-danger")) formMessageBox.classList.remove("alert-danger");
}
else {
formMessageBox.classList.add("alert-danger");
if (formMessageBox.classList.contains("alert-success")) formMessageBox.classList.remove("alert-success");
}
formMessageBox.innerHTML = message;
});
event.preventDefault();
})
//PHP
<?php
if(!$_POST["email"]) {
echo "Please enter an email address";
exit(0);
}
if($_POST["email"] AND !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
echo "Please enter a valid email address";
exit(0);
}
$dbconn = mysqli_connect("localhost","username", "password", "db");
if (mysqli_connect_error()) die("There seems to be something wrong. Sorry, try again later");
require_once('CryptoLib.php');
$token = CryptoLib::randomString(16);
$name = isset($_POST['name']) ? $_POST['name'] : "user";
$email = $_POST['email'];
$emailTo="$email";
$subject="Web Devs' Corner Verification";
$body="http://www.allen-mcintoshii.com/webdevscorner/php/verify.php?conf-token=".$token."&email=".$email;
$headers="From: my_email";
$query = "INSERT INTO `users` (`name`, `email`, `conf_token`) VALUES ('$name', '$email', '$token')";
$result = mysqli_query($dbconn, $query);
if ($result AND mail($emailTo, $subject, $body, $headers)) echo "success";
else echo "fail"; ?>
正直に言うと、それはすべてが重要ではないのですが、それは間違いなく私が起こることを意図したものではないので、なぜ何かを学ぶ機会として、この小さな癖を使わないのでしょうか?私を助けてくれることを決めた皆様に、ありがとうございます。
ロギングステートメントを追加して、コールバックのどれが最初に実行されたかを確認してください。 – deceze
Juh、それについて考えていない、ありがとう私は間違いなく今それを試してみる –
@deceze私は2回だけを確認するために - 私は期待どおりに完了コールバックが最初に発生します。 –