Javascript ajax$.get回调报告为未定义

Javascript ajax$.get回调报告为未定义,javascript,jquery,ajax,Javascript,Jquery,Ajax,我已经定义了一个div,其中基于PHP通过ajax$.get调用返回的MySQL表数据附加了一个带有默认输入值的表单 div看起来像: <div id="esfContainer1"> </div> <!--end esfContainer1 div--> div相对于body标记绝对定位 当与表单验证相关联的脚本包含在对表单进行调用的主页面上时,它就中断了,所以我将其移动到PHP输出$formContent 以下是PHP输出中包含的表单验证和提交脚本: &

我已经定义了一个div,其中基于PHP通过ajax$.get调用返回的MySQL表数据附加了一个带有默认输入值的表单

div看起来像:

<div id="esfContainer1">
</div> <!--end esfContainer1 div-->
div相对于body标记绝对定位

当与表单验证相关联的脚本包含在对表单进行调用的主页面上时,它就中断了,所以我将其移动到PHP输出$formContent

以下是PHP输出中包含的表单验证和提交脚本:

<script type="text/javascript">

var senderName     = $("#sendName");
var senderEmail    = $("#fromemailAddress");
var recipientEmail = $("#toemailAddress");
var emailError     = $("#esemailerrorDiv");

senderName.blur(checkName);
senderEmail.blur(checkSEmail);
recipientEmail.blur(checkREmail);

function checkName() {
if (senderName.val() == "YOUR NAME") {
        $("#esemailerrorText").html("Please provide your name");
        $(emailError).removeClass("esemailError");
        $(emailError).addClass("esemailErrorNow");
        $(emailError).fadeIn("fast","linear");
        $(emailError).delay(2000).fadeOut("slow","linear");
        return false;
    } else {
        return true;
    }
};

function checkSEmail() {
    var a      = senderEmail.val();
    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;

    if (filter.test(a)) {
        return true;
    } else {
        $("#esemailerrorText").html("Please enter a valid email address");
        $(emailError).removeClass("esemailError");
        $(emailError).addClass("esemailErrorNow");
        $(emailError).fadeIn("fast","linear");
        $(emailError).delay(2000).fadeOut("slow","linear");
        return false;
    }
};

function checkREmail() {
    var a      = recipientEmail.val();
    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;

    if (filter.test(a)) {
        return true;
    } else {
        $("#esemailerrorText").html("Your friend\'s email is invalid");
        $(emailError).removeClass("esemailError");
        $(emailError).addClass("esemailErrorNow");
        $(emailError).fadeIn("fast","linear");
        $(emailError).delay(2000).fadeOut("slow","linear");
        return false;
    }
};

$("#emailForm").submit (function() {
    if (checkName() && checkSEmail() && checkREmail()) {

        var emailerData = $("#emailForm").serialize();
        $.get("style.php",emailerData,processEmailer).error("ouch");

        function processEmailer(data) {
            if (data=="fail") {
                return false;
            } else if (data=="pass") {
                $("#c1Wrapper").fadeOut("slow","linear");
                $("#confirmation").fadeIn("slow","linear");
                $("#esfContainer1").delay(2000).fadeOut("slow","linear");
                $("#backgroundOpacity").delay(2000).fadeOut("slow","linear");
                return false;
            }
        };
    return false;
    };
    return false;
}); 
我用return false对上面的提交函数进行了轰炸;因为submit函数只是打开处理PHP脚本,而不是执行$.get。使用Firebug查看submit函数会报告processEmailer未定义

我对这个很陌生。我假设,因为ajax回调是在submit函数中定义的,processEmailer函数是在ajax调用的正下方定义的,所以定义不会有问题

提前感谢您的帮助。

您被困在了。如果/else/for body出现在模块内,则不允许在模块内悬挂功能声明,并且如果它们出现在模块内,则未定义行为。Firefox有条件地定义了它们,在您的情况下,在$.get调用中使用了它们之后(在该调用中未定义),就像在中一样

要解决这个问题,简单地将它放在if块之外,甚至放在整个回调之外。顺便说一句,.errouch不起作用,您需要传递一个函数

$("#emailForm").submit (function() {
    if (checkName() && checkSEmail() && checkREmail()) {
        var emailerData = $("#emailForm").serialize();
        $.get("style.php",emailerData).done(processEmailer).fail(function() {
            console.log("ouch");
        });
    }
    return false;

    // now a proper function declaration, will be hoisted:
    function processEmailer(data) {
        if (data=="fail") {
            return false;
        } else if (data=="pass") {
            $("#c1Wrapper").fadeOut("slow","linear");
            $("#confirmation").fadeIn("slow","linear");
            $("#esfContainer1").delay(2000).fadeOut("slow","linear");
            $("#backgroundOpacity").delay(2000).fadeOut("slow","linear");
            return false;
        }
    }
});

我在读这篇文章,基于这一点,这篇文章应该是正确的。不,提升只适用于函数声明——您没有这样做,因为函数不在代码的顶层。外国金融机构如何处理这一问题,请参见以下章节。外国金融机构对答复的速度和清晰度感到惊讶。非常感谢。你的建议完全按照你描述的方式解决了问题。我也很感激这个信息丰富的链接