2010-05-24 4 views
2

Je souhaite utiliser jQuery pour appeler le service Web aC#, appelé c.ashx, qui vérifie si ce nom d'utilisateur est valide et renvoie un message d'erreur en tant que chaîne.Comment utiliser jQuery pour faire un appel à C# webservice pour obtenir la valeur de retour

Que dois-je mettre pour les données: et le type de contenu: si la valeur de retour du web service C# est une valeur de chaîne?

jQuery.ajax({ 
type: "GET", 
url: "/services/CheckUserName.ashx", 
data: "", 
contenttype: "", 

success: function (msg) { 
    alert("success"); 

}, 
error: function (msg, text) { 
    alert(text); 
} 
}); 

J'ai créé un fichier .asmx à la place, mais il ne soit pas appelé par le jQuery. Est-ce que ce qui suit est correct?

jQuery.validator.addMethod("UsernameCheck", function (value, element) { 
    jQuery.ajax({ 
     type: "POST", 
     url: "/services/CheckUsername.asmx?CheckUsername", 
     data: '{ "context": "' + jQuery("#username").value + '"}', 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 

     success: function (msg) { 
      alert("success"); 

     }, 
     error: function (msg, text) { 
      alert(text); 
     } 
    }); 
}); 

Répondre

5

Les données doivent contenir les paramètres de la méthode que vous appelez un service Web. Cependant, l'extension ashx est pour un gestionnaire HTTP, ce qui n'est pas un bon choix pour ce scénario. Un service Web devrait être utilisé à la place.

Donc, si vous appeliez /services/LoginServices.asmx?CheckUserName et CheckUserName.asmx avait un webmethod ValidateUser tels que

public string ValidateUser(string username) 

l'attribut data pour jQuery serait

data: '{ "username": "' + usernameValue + '"}' 

votre contentType devrait être application/json; charset=utf-8, et dataType doit être "json".

Notez que vous n'allerez pas appeler /services/CheckUserName.asmx, le nom de la méthode dans le service Web doit être ajouté à l'URL de service Web, /services/LoginServices.asmx?CheckUserName.

De plus, vous devrez remplacer votre type par "POST".

Voici un exemple complet:

$.ajax({ 
type: 'POST', 
url: 'LoginServices.asmx/CheckUserName', 
data: '{"username": "' + usernameValue + '"}', 
contentType: 'application/json; charset=utf-8', 
dataType: 'json', 
success: function(msg) { 
    alert("Result: " + msg); 
}, 
error: function(XMLHttpRequest, textStatus, errorThrown) { 
    alert("Error: " + textStatus); 
}}); 

Hope this helps

+0

Merci pour votre réponse :) La méthode C# est seulement appelé quand je commente les données: la ligne et il des erreurs parce que le nom d'utilisateur entré par l'utilisateur n'est pas transmis à la méthode C#. La méthode dans le fichier C# est public void ProcessRequest (contexte HttpContext) {} et il obtient le nom d'utilisateur en utilisant la chaîne _username = context.Request ["username"]; - devrais-je changer cette méthode en chaîne publique ValidateUser (nom d'utilisateur de chaîne)? ou pouvons-nous passer le nom d'utilisateur d'une manière différente? Merci, – Theomax

+0

On dirait que vous utilisez un gestionnaire HTTP au lieu d'un service Web, une raison spécifique pour cela? Il est possible d'utiliser un gestionnaire, ce n'est pas une pratique courante, et la mise en œuvre sera différente. Ma réponse était basée sur l'utilisation d'un service web au lieu d'un gestionnaire. Désolé pour la confusion. –

+0

Le gestionnaire HTTP est déjà là - pourriez-vous donner un exemple en utilisant ce code? J'ai créé un webservice .asmx mais il n'est pas appelé. – Theomax

0

Le code jQuery ne fonctionnait pas parce qu'il ne demandait pas le webservice. J'ai corrigé ceci en créant une classe de gestionnaire HTTP et en lui passant le nom d'utilisateur. J'ai changé la valeur pour les données: à ce qui suit et il est passé le nom d'utilisateur saisi par l'utilisateur:

data: "username=" + jQuery("#username").val(), 
Questions connexes