Чтобы предотвратить потерю postback: isValid = “undefined”

У меня есть код для предотвращения обратной передачи, но сбой. В основном у меня есть кнопка asp.net.

 

И веб-сервис ajax call.

 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; } 

Веб-служба вернет логическое значение, и это произойдет, когда я вхожу в код. Однако, когда я вступил в 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; }