2010-01-13 3 views
0

Je crée un post ajax jQuery dans une fonction javascript utilisée par un contrôle asp:CustomValidator. La méthode web renvoie un booléen. Comment puis-je convertir le résultat pour que le script de validation fonctionne correctement.Comment traiter les résultats d'un post jQuery ajax

code côté client

<script language="javascript" type="text/javascript"> 
function ValidateInput(source, args) { 
    if($('#MyTxtBox').val().length > 0) { 
     var result; 
     var webMethod = 'http://domain/webservice.asmx/ValidateInput'; 
     var parameters = "{'input':'" + $('#MyTxtBox').val() + "'}"; 

     $.ajax({ 
      type: "POST", 
      url: webMethod, 
      data: parameters, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) {    
       args.IsValid = msg.d; 
      } 
     }); 
    } 
    else { 
     args.IsValid = false; 
    } 
} 
</script> 
<asp:TextBox ID="MyTxtBox" runat="server" /> 
<asp:CustomValidator ID="cvCreditCardNumber" runat="server" ClientValidationFunction="ValidateCCNumber" Display="Dynamic" 
ErrorMessage="&nbsp;Please enter valid input." /> 

code de service Web

[WebMethod] 
[ScriptMethod(ResponseFormat=ResponseFormat.Json)] 
public bool ValidateInput(string input) 
{ 
    if(input.Equal("jQuery is awesome!")) 
     return true; 
    else 
     return false; 
} 
+0

Je pense que vous devez écrire le résultat dans votre webservice, et ne pas utiliser ** return ** comme dans les fonctions normales. – Steven

+0

@Steven - Comment pourrais-je accomplir cela? –

Répondre

1

Eh bien, je ne pense pas que cela va fonctionner de la manière habituelle. La requête AJAX est asynchrone, et comme il n'y a qu'un seul thread d'interface utilisateur, vous ne pouvez pas bloquer pour l'attendre. La fonction de validation fournie à ASP.NET doit être synchrone.

Vous pouvez le pirater pour travailler, peut-être, si vous pouvez retarder la validation et commencer la demande AJAX plus tôt. Mais dans ce cas, je dirais qu'il suffit d'utiliser la validation côté serveur car ce que vous avez comme validation côté client, c'est de toute façon toucher le serveur.

+0

@Frank - Je suis allé de l'avant et supprimé toutes les fonctionnalités ajax et l'a remplacé par le contrôle «asp: RequiredFieldValidator». Facilitez-vous la vie ... –

+0

Vous pouvez simplement ajouter async: false à votre appel $ .ajax() et cela devrait fonctionner correctement. –

+0

AJAX synchrone? Je n'avais pas réalisé que c'était possible, c'est toujours joli yuk. Mieux vaut effectuer la validation côté serveur. –