XVal、JQuery验证和Ajax噢,天哪!
我将xVal与MVC和jquery一起使用。这一切都很好地工作,直到我得到我的自定义验证器,它执行ajax调用 根据firbug Net选项卡,ajax调用返回正确的值。但是出了点问题,我想不出来 下面是javascript代码:XVal、JQuery验证和Ajax噢,天哪!,jquery,asp.net-mvc,ajax,xval,Jquery,Asp.net Mvc,Ajax,Xval,我将xVal与MVC和jquery一起使用。这一切都很好地工作,直到我得到我的自定义验证器,它执行ajax调用 根据firbug Net选项卡,ajax调用返回正确的值。但是出了点问题,我想不出来 下面是javascript代码: function CheckEmail() { var res; $.ajax({ type: "GET", url: "/User/CheckEmail", data: "email=" + $
function CheckEmail() {
var res;
$.ajax({
type: "GET",
url: "/User/CheckEmail",
data: "email=" + $('#EmailAddress').val(),
success: function(result) {
res = result;
}
});
if (res == "True") {
return true;
}
else {
return false;
}
}
当我使用firebug时,res显示为未定义。我想这就是问题所在
我花了大约4个小时重新安排和更改此代码,但似乎没有任何东西能使其正常工作
我有一个理论,它不会等到ajax完成后才运行if语句。有人能证实或否认这一点吗?Ajax中的“A”代表异步
$.ajax({
type: "GET",
async: false,
url: "/User/CheckEmail",
data: "email=" + $('#EmailAddress').val(),
success: function(result) {
res = result;
}
});
发生的情况是,您的代码被这样调用:
$.ajax(...);
if (res == "True") {
return true;
} else {
return false;
}
然后稍后(如毫秒后),ajax请求返回并调用:
function(result) {
res = result;
}
有些人建议将Ajax调用设置为异步,但这将在请求返回之前防止浏览器中发生任何其他事情,这可能是由于许多原因造成的
最好的解决方案是将验证逻辑放在回调中,而不是放在创建和发送Ajax请求的函数中
例如:
function CheckEmail() {
$.ajax({
type: "GET",
url: "/User/CheckEmail",
data: "email=" + $('#EmailAddress').val(),
success: function(result) {
if (result == "True") {
doSomethingPositive();
} else {
warnUserInvalidEmail();
}
}
});
}
Ajax中的“A”表示异步
$.ajax({
type: "GET",
async: false,
url: "/User/CheckEmail",
data: "email=" + $('#EmailAddress').val(),
success: function(result) {
res = result;
}
});
发生的情况是,您的代码被这样调用:
$.ajax(...);
if (res == "True") {
return true;
} else {
return false;
}
然后稍后(如毫秒后),ajax请求返回并调用:
function(result) {
res = result;
}
有些人建议将Ajax调用设置为异步,但这将在请求返回之前防止浏览器中发生任何其他事情,这可能是由于许多原因造成的
最好的解决方案是将验证逻辑放在回调中,而不是放在创建和发送Ajax请求的函数中
例如:
function CheckEmail() {
$.ajax({
type: "GET",
url: "/User/CheckEmail",
data: "email=" + $('#EmailAddress').val(),
success: function(result) {
if (result == "True") {
doSomethingPositive();
} else {
warnUserInvalidEmail();
}
}
});
}
是的,你说得对。默认情况下是异步调用。您可以添加async:false使其同步
$.ajax({
type: "GET",
async: false,
url: "/User/CheckEmail",
data: "email=" + $('#EmailAddress').val(),
success: function(result) {
res = result;
}
});
是的,你说得对。默认情况下是异步调用。您可以添加async:false使其同步
$.ajax({
type: "GET",
async: false,
url: "/User/CheckEmail",
data: "email=" + $('#EmailAddress').val(),
success: function(result) {
res = result;
}
});
不需要对web服务器进行同步调用。您应该尽可能避免这些,因为用户的浏览器在等待回复期间会被锁定
我最近写了一篇文章(正是您想要实现的),展示了如何通过异步请求实现这一点 不需要对web服务器进行同步调用。您应该尽可能避免这些,因为用户的浏览器在等待回复期间会被锁定
我最近写了一篇文章(正是您想要实现的),展示了如何通过异步请求实现这一点 有点晚了,但我能说的就是避免ajax表单验证——它会创造糟糕的用户体验。 这样考虑一下,如果表单中有50个字段,并且希望获得交互式验证体验,那么每次用户完成一个字段时,脚本都会调用服务器。
打开Firebug看一看,不要感到震惊。有点晚了,但我能说的就是避免ajax表单验证——它会创造糟糕的用户体验。 这样考虑一下,如果表单中有50个字段,并且希望获得交互式验证体验,那么每次用户完成一个字段时,脚本都会调用服务器。
打开Firebug并看一看,不要感到震惊。您可能想查看xVal。它使用域验证规则在视图中生成jQuery验证脚本(它也执行服务器端验证)。使用xVal调用此函数以与自定义服务器端验证属性相对应:)好的。我发现新版本的xVal(1.0)有一个远程规则类型。你可以在史蒂夫的博客上读到这一切:它为我解决了问题。你可能想看看xVal。它使用域验证规则在视图中生成jQuery验证脚本(它也执行服务器端验证)。使用xVal调用此函数以与自定义服务器端验证属性相对应:)好的。我发现新版本的xVal(1.0)有一个远程规则类型。你可以在史蒂夫的博客上看到这一切:它为我解决了问题。我认为这可能是真正的出路。b/c我需要从该函数返回true或false,以便xVal使用它。zulrang的解决方案不可能做到这一点。我认为这实际上可能是一条出路。b/c我需要从该函数返回true或false,以便xVal使用它。zulrang的解决方案不允许这样做。如果xVal没有使用它,这将非常有效,但需要为xVal返回true/false如果xVal没有使用它,这将非常有效,但需要为xVal返回true/false感谢链接!这看起来是比让浏览器等待更好的解决方案。更加用户友好。我现在就要尝试实现它!谢谢你的链接!这看起来是比让浏览器等待更好的解决方案。更加用户友好。我现在就要尝试实现它!是的,在服务器上有50个字段进行验证显然是个坏主意,但是需要对服务器进行唯一用户名检查或类似的样式。是的,在服务器上有50个字段进行验证显然是个坏主意,但是需要对服务器进行唯一用户名检查或类似的样式。