我有防止回发但是失败的代码。基本上我有一个asp.net按钮。
<asp:Button ID="btnSave" runat="server" Text="SaveChanges" OnClick="btnSave_Click"
CssClass="saveButton" ValidationGroup="answer" OnClientClick="return ValidateUserNameBeforeSubmitting();" />
ajax调用Web服务。
function ValidateUserName() {
$.ajax({ type: "POST",
url: "../UserNameWebService.asmx/ValidateUserName",
data: "{'strUsername': '" +JSON.stringify( $("#<%=TextUserName.ClientID%>").val()) + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
return data.d;
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
}
function ValidateUserNameBeforeSubmitting() {
var isValid = ValidateUserName();
return isValid;
}
Web服务将返回一个布尔值,当我进入代码时它会执行。 然而,当我进入javascript代码时,我发现“isValid”不是布尔值。它是“未定义的”。 为什么呢?
感谢。
答案 0 :(得分:1)
Ajax是异步的。
var isValid = ValidateUserName();
此行执行,但您正在调用的函数没有返回(因此undefined
)
如果要访问从ajax返回的变量,则需要在成功处理程序中。
function ValidateUserName() {
var returnValue;
$.ajax({ type: "POST",
...
async: false,
success: function (data) {
returnValue = data.d;
},
...
});
return returnValue;
}
答案 1 :(得分:0)
isValid
未定义,因为ValidateUserName()
实际上没有返回任何内容。
将ajax调用更改为此
function ValidateUserName() {
var results = $.ajax({ type: "POST",
url: "../UserNameWebService.asmx/ValidateUserName",
data: "{'strUsername': '" +JSON.stringify( $("#<%=TextUserName.ClientID%>").val()) + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false
});
return results;
//or results.d; if thats what you need for the boolean
}
当ajax标记为async:false
时,ajax调用的结果包含您的结果。而不是传递给成功函数
答案 2 :(得分:0)
范围一个返回变量,所以所有路径都返回并确保你的ajax调用返回一个bool:
function ValidateUserName() {
var result = false; //default
$.ajax({ type: "POST",
url: "../UserNameWebService.asmx/ValidateUserName",
data: "{'strUsername': '" +JSON.stringify( $("# <%=TextUserName.ClientID%>").val()) + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
result = data.d; //make sure this is a bool
//result = Boolean(data.d); //use this if returning a string, not recommended though
alert(result); //are you a bool?
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
return result;
}
function ValidateUserNameBeforeSubmitting() {
var isValid = ValidateUserName();
return isValid;
}