防止回发失败:isValid =“undefined”

我有代码来防止回发但失败了。 基本上我有一个asp.net按钮。

 

和ajax调用Web服务。

 function ValidateUserName() { $.ajax({ type: "POST", url: "../UserNameWebService.asmx/ValidateUserName", data: "{'strUsername': '" +JSON.stringify( $("#").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”不是布尔值。 它是“未定义的”。 为什么?

谢谢。

Ajax是异步的。

var isValid = ValidateUserName();

这一行执行,但你正在调用的函数没有返回(因此undefined

如果要访问从ajax返回的变量,则需要在成功处理程序中。

 function ValidateUserName() { var returnValue; $.ajax({ type: "POST", ... async: false, success: function (data) { returnValue = data.d; }, ... }); return returnValue; } 

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调用的结果包含您的结果。 而不是传递给成功函数

范围返回变量,以便所有路径返回并确保您的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; }