Man*_*imo 3 jquery function undefined
谁能给我一个线索,为什么这不起作用?该函数返回undefined.它会警告一个布尔值,但仍然返回undefined?!
谢谢
function IsUniqueEmail() {
var email = $("#<%=EmailAddress.ClientID%>").val();
if (email.length > 0) {
$.ajax({
url: 'handlers/validator.ashx',
dataType: 'json',
data: { "n": "email", "v": email },
async: false,
success: function(data) {
alert(eval(data.success));
return eval(data.success);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
return true;
}
});
}
}
$(document).ready(function() {
var execScript = $(".buttonStep1").attr("href").replace("javascript:", "");
$(".buttonStep1").attr("href", "#").click(function() {
// Add before click logic here
var IsOk = IsUniqueEmail();
if (IsOk) {
$("#EmailAddressInUseMessage").hide();
eval(execScript);
}
else {
$("#EmailAddressInUseMessage").show();
}
});
});
Run Code Online (Sandbox Code Playgroud)
这是ajax调用的响应
{ "success": false, "error" : "ERROR_EMAILINUSE" }
Run Code Online (Sandbox Code Playgroud)
使用AJAX时的脚本执行路径不是线性的.您IsUniqueEmail将在AJAX请求收到响应之前退出,不返回任何内容.
你要返回的是什么$.ajax,这是一个调用的方法,success它可能被忽略了.
您可以用这种方式重写代码:
$(document).ready(function() {
$(".buttonStep1").click(function() {
IsUniqueEmail();
// never follow this link
return false;
});
});
Run Code Online (Sandbox Code Playgroud)
通过这种方式,按钮单击只是启动请求 - 它不会继续执行任何其他操作.之后,您将在AJAX响应中完成所有魔术:
function IsUniqueEmail() {
var email = $("#<%=EmailAddress.ClientID%>").val();
if (email.length > 0) {
$.ajax({
url: 'handlers/validator.ashx',
dataType: 'json',
data: { "n": "email", "v": email },
async: false,
success: function(data) {
alert(eval(data.success));
if(eval(data.success)) {
// Execute code to continue after the click here
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
return true;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)