2012-04-23 4 views
0

У меня есть jquery ajax call asp.net, но он не работает. Я получил ошибку:ajax call web service: return undefined

isValid недофинансирован.

Я установил точку останова и обнаружил, что код никогда не достигает веб-службы. Jquery:

<script src="../jquery-1.7.2.min.js" type="text/javascript"></script> 
<script> 
    function ValidateUserName() { 
     var isValid; 
     $.ajax({ type: "POST", 
      url: "UserNameWebService.asmx/ValidateUserName", 
      data: "{'strUsername': '" + $("#<%=TextUserName.ClientID%>").val() + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: false, 
      success: function (data) { 
       isValid = data; 
      } 
     }); 
     return isValid; 
     } 
</script> 

кода веб-службы:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService] 
public class UserNameWebService : System.Web.Services.WebService 
{ 

    [WebMethod] 
    public bool ValidateUserName(string strUsername) 
    { 
     \\ then return something by logic 

Спасибо.

+0

Вы использовали Firebug или что-то похожее на просмотр запроса/ответа? –

ответ

3

Вы возвращаетесь isValid, прежде чем ваш Ajax будет завершен. Лучше всего написать функцию, которая вызывается при завершении вашего вызова Ajax.

$.ajax({ type: "POST", 
     url: "UserNameWebService.asmx/ValidateUserName", 
     data: "{'strUsername': '" + $("#<%=TextUserName.ClientID%>").val() + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: false, 
     success: function (data) { 
      RenderResult(data); 
     } 
    }); 

Затем обработайте возвращаемые данные здесь.

function RenderResult(data){ 
    // handle the returned result here 
    var isValid = data; 
} 
+0

Ну, я бы не стал этого делать, потому что вы ничего не собираетесь возвращать. Вы хотите обновить свой интерфейс/результат в этой функции. –

+0

мы можем обработать возврат в вашем коде, как это? функция RenderResult (data) {if (data.value == false) return false; else return true;} –

+0

Вы ничего не будете возвращать. Обновите свой интерфейс пользователя из этой функции. Итак, что вы делаете с результатом 'ValidateUserName' здесь. например функция RenderResult (данные) {if (data == true) {alert («Имя пользователя недействительно»); }}; –