gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 09:16:07 25 4
gpt4 key购买 nike

我定义了一个 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;”对上面的提交函数进行了轰炸。因为提交函数只是打开处理 PHP 脚本而不是执行 $.get。使用 Firebug 观察提交函数报告 processEmailer 未定义。

我对此很陌生。我假设因为 ajax 回调是在提交函数中定义的(并且 processEmailer 函数是直接在 ajax 调用下面定义的),所以定义不会有问题。

预先感谢您的帮助。

最佳答案

你被 function statements 困住了。 block 内不允许使用函数声明(将被提升)(if/else/for 体),如果它们出现在那里,则行为未定义。 Firefox 有条件地定义它们,在您的情况之后您在 $.get 调用中使用了它 - 它是未定义然后 - 就像在 var functionName = function() {} vs function functionName() {} .

要解决这个问题,只需将其放在 if block 之外(甚至放在整个回调之外)。顺便说一句, .error("ouch") 不起作用,您需要传递一个函数。

$("#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;
}
}
});

关于javascript - ajax $.get 回调报告为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15650647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com