我遇到麻烦,将返回字符串传递回验证器。
这是我的JS
$('#frmSignUp').validator({
custom: {
emailexist: function ($el) {
var result = checkUserEmail($el.val())
.done(function (r) {
if (!r.success) {
// email already in use
return r;
}
})
return result.responseText;
}
}
});
function checkUserEmail(name) {
return $.ajax({
url: '@Url.Action("CheckUserName","Account")',
data: { ChapterPOCEmail: name },
type: 'POST',
dataType: 'json'
});
}
在Chrome Dev工具中," R"确实确实使完整的JSON从控制器返回
{" success":false," ponsponseText":"该电子邮件已经在使用。"}
但是,验证器未接收字符串,因此仍在反馈中显示绿色复选标记,在帮助块中没有消息。我尝试使用"数据记录",但是我无法获得ASP.NET来正确返回状态代码以及消息正确。它覆盖了我发送回的任何自定义消息,验证器无法收到它。
对我的问题的任何帮助将不胜感激。
ajax
是deafult的异步方法,不返回任何值。
您可以强迫它是同步的,也可以使用承诺,并以成功的价值使用...
用以下方式更改checkUserEmail
:
function checkUserEmail(name) {
var r = false;
$.ajax({
url: '@Url.Action("CheckUserName","Account")',
data: { ChapterPOCEmail: name },
type: 'POST',
dataType: 'json',
async: false // wait for the call, dont treat as an async call
}).done(function(result) {
r = result === "OK";
}).fail(function (err) {
console.log(err, "something went awire");
}).always(function () {
console.log("all done");
});
return r;
}
我假设您的Ajax调用返回OK
,请记住相应地更改它。