mercredi 22 juin 2016

How to return false from a main function after an ajax callback?


I perform an edit to ensure against duplicate emails by making an ajax call and supplying a callback. If a duplicate exists, I want to return false from submit event. Is there an elegant way to achieve this without setting async=false? What I tried (see emailCallback) is not working.

submit event

EDIT (included the rest of the submit handler).

$("#form-accounts").on("submit", function (e) {
    e.preventDefault();
    if (!$(this).get(0).checkValidity()) return false;
    if (!customValidation(true, false)) return;
    checkDupEmail(emailCallback);
    function emailCallback(result) {
        if (result) return (function () { return false } ());
    }
    if ($("#submit").text() == "Create Account") {
        var formData = $("#form-accounts").serialize().replace("''", "'");
        ajax('post', 'php/accounts.php', formData + "&action=create-account", createSuccess);
        function createSuccess(result) {
            if (isNaN(result)) {
                showMessage(0, result);
                return;
            }
            localStorage.setItem("account-id", result);
            debugger
            setUsertype($("input[name=user-type]:checked").val());
            showMessage(1, "Account Created");
        };
        return
    }
    var rString = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
    function randomString(length, chars) {
        var result = '';
        for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
        return result;
    };
    var anRandom = randomString(14, rString);
    $("#code").val(anRandom);
    console.log("v-code=" + anRandom);
    $("#submit").css({ 'display': 'none' });
    $("#verify").css({ 'display': 'block' });
    var subject = "Writer's Tryst Verification Code"
    $("#subject").val(subject);
    var msg = "This mail is intended for the person who requested verification of email ownership at Writers-Tryst (" + getWriterTrystURL() + ").nn" + "Double click on the code below and then copy it. Return to our website and and paste the code.nnYour verification code: nn" + anRandom;
    $("#msg").val(msg);
    var formData = $("#form-accounts").serialize().replace("''", "'");
    ajax('post', 'php/sendmail.php', formData, successMail, "create-account error: ");
    function successMail(result) {
        $("#ver-email-msg").val("An email has been sent to you. Double-click the verification code then copy and paste it below.").css({ 'display': 'block' });
    }
});

function checkDupEmail(callback) {
    var data = {};
    data.action = "validate-email";
    data.email = $("#email").val();
    ajax('post', 'php/accounts.php', data, emailSuccess);
    function emailSuccess(result) {
        if (parseInt(result) > 0) {
            showMessage(0, "The email address is in use. Please supply another or login instead of creating a new account.")
            callback(true);
        } else callback(false);
    }
}

Aucun commentaire:

Enregistrer un commentaire