L'appel de service web asmx à l'aide de JQuery avec des paramètres causes d'erreur 500
J'ai un assez simple service web:
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public string GetToken(string a)
{
}
Et je suis l'appelant côté client à l'aide de JQuery:
$.ajax({
post: 'GET',
contentType: "application/json; charset=utf-8",
dataType: 'json',
url: '../url/GetToken',
data: "{'a':'test'}",
success: function (data) {
},
error: function (a, b, c) {
}
});
L'appel échoue toujours et l'erreur renvoyée est de 500 Erreur Interne du Serveur. J'ai placé un point d'arrêt à l'intérieur du service web, et le code n'est pas atteint du tout. Quand je modifie le service web à aucun des arguments à tous (et à la suppression de la data
élément de l'JQuery appel) l'appel réussit. J'ai joué un peu avec les différentes manières de passer le data
élément; j'ai passé un objet JSON (pas de guillemets), et j'ai enlevé les guillemets autour de la a
argument. Rien de tout cela fonctionne.
Edit:
À l'aide de Fiddler, j'ai déterminé que l'erreur causant la 500 est non Valide "appel de service web, manquant de valeur pour le paramètre".
Edit 2:
De transmettre les données de cette façon œuvres:
data: "a='test'"
Je n'ai aucune idée pourquoi. Des idées?
- Êtes-vous de retourner quoi que ce soit dans le GetToken méthode, juste de ne pas le montrer?
- Oui, je le suis. Le service web renvoie une chaîne de caractères.
Vous devez vous connecter pour publier un commentaire.
N'ai pas testé, mais dans votre extrait de code que vous avez
post: 'GET'
plutôt quetype: 'GET'
. Qui peut être à l'origine du serveur de rejeter le contentType json (c'est pourquoi vos données n'est pas sérialisé correctement).Vous pouvez utiliser un outil comme Fidler pour vérifier la réponse que vous obtenez de retour. Il y a très probablement une page d'erreur retournés, mais puisque c'est un appel ajax jquery vous n'êtes pas le voir.
Je ne pouvais pas utiliser l'OBTENIR, il fallait utiliser POST type, et mon service web est dans le même répertoire, mais cela a fonctionné: