如何在AJAX中抛出错误消息?

时间:2016-01-13 11:38:33

标签: javascript jquery ajax try-catch

出于某种原因,我无法抛出错误消息来说明我的用户表中是否存在电子邮件。据我所知,因为AJAX是异步的,我不能在完整的函数中使用try和catch错误消息。但我尝试将其拆分为函数,但仍然无法正常工作。

尝试,抓住功能(我会在我的代码中将其他地方称为其他地方)

try {

    // Check fields are not empty
    if (!firstName || !lastName || !aquinasEmail || !sPassword || !sCPassword || !Gender) {
        throw "One or more field(s) have been left empty.";
    }

    // Check the email format is '@aquinas.ac.uk'
    if(!emailCheck.test(aquinasEmail)) {
        throw "The email address you entered has an incorrect email prefix. ";
    }

    // Check there are not any numbers in the First or Last name
    if (!regx.test(firstName) || !regx.test(lastName)) {
        throw "First Name or Last Name is invalid.";
    }

    // Check the confirmation password is the same as the first password
    if (sPassword != sCPassword) {
        throw "The two passwords you've entered are different.";
    }

    if(duplicatedEmail()) {
        throw "Sadly, your desired email is taken. If you have forgotten your password please, <a href=\"#\">Click Here</a>";
    }



} catch(err) {
    if (!error) {
        $('body').prepend("<div class=\"error alert\">"+err+"</div>");
        $('.signupInput.sPassword').val('');
        $('.signupInput.sCPassword').val('');
        setTimeout(function() {
            $('.error.alert').fadeOut('1000', function() {$('.error.alert').remove();});
        }, 2600);
    }

    event.preventDefault();
}

AJAX功能:

function duplicatedEmail() {
// Use AJAX function to do verification checks which can not be done via jQuery.
        $.ajax({
            type: "POST",
            url: "/login/ajaxfunc/verifyReg.php",
            dataType: "JSON",
            async: false,
            data: $('.signupForm').serialize(),
            success: function(data) {
                    if (data.emailTaken == true) {
                        return true;
                    } else {
                        return false;
                    }
            }
        });
}

verifyReg.php

<?php
    header('Content-Type: application/json', true);
    $error = array();
    require_once '../global.php';

    $_POST['aquinas-email'] = "aq142647@aquinas.ac.uk";

    // Check if an email already exists.
    $checkEmails = $db->query("SELECT * FROM users WHERE aquinasEmail = '{$_POST['aquinas-email']}'");
    if ($db->num($checkEmails) > 0) {
        $error['emailTaken'] = true;
    } else {
        $error['emailTaken'] = false;
    }

    echo json_encode($error);
?>

3 个答案:

答案 0 :(得分:1)

用jquery ajax函数来处理错误,像这样添加错误回调

div ng-repeat="d in index track by $index"
  input type="checkbox" name="name" value="" id="{{$index}}" ng-model="{{d}}"/
/div

在PHP中抛出异常:

           function duplicatedEmail() {
            // Use AJAX function to do verification checks which can not be done via jQuery.
                    $.ajax({
                        type: "POST",
                        url: "/login/ajaxfunc/verifyReg.php",
                        dataType: "JSON",
                        async: false,
                        data: $('.signupForm').serialize(),
                        success: function(data) {
                                if (data.emailTaken == true) {
                                    return true;
                                } else {
                                    return false;
                                }
                        },  
                       error: function() {
                             //Your Error Message   
                     console.log("error received from server");       
                               }  
                    });
            }

答案 1 :(得分:0)

查看 AJAX函数,以及这两个答案herehere,您需要对返回同步结果的方式进行一些小改动: - < / p>

function duplicatedEmail() {

    var result;

    $.ajax({
        type: "POST",
        url: "/login/ajaxfunc/verifyReg.php",
        dataType: "JSON",
        async: false,
        data: $('.signupForm').serialize(),
        success: function(data) {
                result = data.emailTaken;
        }
    });

    return result;
}

答案 2 :(得分:0)

使用ajax错误函数..

function duplicatedEmail() {
// Use AJAX function to do verification checks which can not be done via jQuery.
    $.ajax({
        type: "POST",
        url: "/login/ajaxfunc/verifyReg.php",
        dataType: "JSON",
        async: false,
        data: $('.signupForm').serialize(),
        success: function(data) {
                if (data.emailTaken == true) {
                    return true;
                } else {
                    return false;
                }
        },
        error: function (result) {
            alert("Error with AJAX callback"); //your message
        }
    });
}