我遇到了将返回字符串传递回验证器的麻烦。
这是我的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
{"成功":false," responseText":"该电子邮件已在使用中。"}
但是,验证器没有接收到字符串,因此仍然在反馈中显示绿色复选标记,并且帮助块中没有消息。我曾尝试使用" data-remote"但我无法让asp.net正确返回状态代码和消息。它覆盖了我发回的任何自定义消息,验证器无法接收它。
对我的问题有任何帮助将不胜感激。
答案 0 :(得分:1)
ajax
是异步方法by 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
,请记得相应地更改它。