在这个函数中:
function ValidateForm()
{
var ret = true;
if ($("#txtName").val().trim().length == 0) { ret = false; $('#txtName').effect("highlight", {}, 1000); }
if ($("#txtSurname").val().trim().length == 0) { ret = false; $('#txtSurname').effect("highlight", {}, 1000); }
if ($("#txtUserName").val().trim().length == 0) { ret = false; $('#txtUserName').effect("highlight", {}, 1000); }
else {
var pData = {}; pData["username"] = $("#txtUserName").val();
$.ajax({
url: 'service.aspx?/isusernameexist/',
dataType: 'json',
type: "POST",
data: pData,
success: function (data) {
if (data[0].cnt > 0) {
ret = false; $('#txtUserName').effect("highlight", {}, 1000);
}
}
});
}
return ret;
}
我正在尝试在插入新用户之前验证表单,但检查用户名是否可以免费使用一段时间,我的函数ValidateForm()
在ajax请求完成之前返回值。
如果在这种情况下正确实现ajax功能?
答案 0 :(得分:0)
你不能这样做。 Javascript中的事件系统是asycnchronous,并且该函数将始终在运行AJAX请求之前返回,并且触发回调。
你应该找到另一种方法来做到这一点。必须重写调用ValidateForm
的函数以考虑JavaScript的异步性质。想想它的作用以及如何使它在约束中发挥作用。
是否向用户显示错误?如果是这样,请在回调函数中显示该错误。
是否使表单无效或阻止提交?如果是这样,请将其存储为全局变量或数据属性,以便稍后在提交时查找。