我有一个自定义验证器来检查输入的号码是否唯一。如果数字不唯一,则应返回false。
javascript代码是这样的:
function ValidatePAuthNo(sender, args) {
//args.IsValid = true;
var PAuthNo = $('[id$=tbPriorAuthNumber]').val();
$.ajax({
type: "POST",
url: "MedicaidPriorAuth.aspx/IsPAuthUnique",
data: JSON.stringify({ pAuthNo: PAuthNo }),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
error: function (response) {
alert(" An error occurred." + response.error);
},
success: function (data) {
if (data.d == false) {
//alert("P. Auth# already exists! Please enter new P. Auth #.");
$("[id$=lblError]").val("P. Auth# already exists! Please enter new P. Auth #.");
args.isValid = false;
} else {
$("[id$=lblError]").val("");
args.isValid = true;
}
}
});
return args.IsValid;
}
我的Web方法正在返回正确的值,但问题是返回args.IsValid是在ajax方法之前调用的。我在这里做错了吗?如果我的方法是错误的,那么从客户端这样做的正确方法是什么?
答案 0 :(得分:-1)
ajax方法是异步调用,这意味着它向服务器发送请求,服务器在其自己的时间返回它。同时,线程(javascript)的执行继续。这意味着您无法从ajax调用返回响应,因为返回将在服务器到达的响应之前发生。
解决方案是一种回调方法。您可以使用jquery promises执行此操作,但为简单起见,下面的示例仅使用javascrpt。 https://api.jquery.com/promise/
这也是一个非常容易找到的问题,您应该在发布新问题之前尝试搜索答案
function ValidatePAuthNo(sender, args, callback) { // call back is a function you pass as an argument
//args.IsValid = true;
var PAuthNo = $('[id$=tbPriorAuthNumber]').val();
$.ajax({
type: "POST",
url: "MedicaidPriorAuth.aspx/IsPAuthUnique",
data: JSON.stringify({ pAuthNo: PAuthNo }),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
error: function (response) {
alert(" An error occurred." + response.error);
},
success: function (data) {
if (data.d == false) {
//alert("P. Auth# already exists! Please enter new P. Auth #.");
$("[id$=lblError]").val("P. Auth# already exists! Please enter new P. Auth #.");
args.isValid = false;
} else {
$("[id$=lblError]").val("");
args.isValid = true;
}
callback(args.isValid);
}
});
}