Passage de paramètre à WebMethod avec jQuery Ajax

J’ai une méthode web simple et un appel ajax et continue à recevoir une erreur disant qu’il ne peut pas convertir une chaîne en object IDictionary ???

Voici l’appel ajax:

var params = '{"ID":"' + rowid + '"}'; $.ajax({ url: 'EDI.asmx/GetPartnerDetails', type: "POST", contentType: "application/json; charset=utf-8", data: JSON.ssortingngify(params), dataType: "json", //not json . let me try to parse success: function(msg, st) { . . . . 

Voici le webMethod:

  _ Public Function GetPartnerDetails(ByVal ID As Ssortingng) As Ssortingng 'Dim objParam As IDictionary = CType(JsonConvert.DeserializeObject(ID), IDictionary) 'Dim rowID As Ssortingng = objParam("ID") Dim objController As New HealthComp.BLL.X12Partners.TradingPartnersController Dim objInfo As TradingPartnersInfo = objController.FetchByPartnerID(Int32.Parse(ID)) Return JsonConvert.SerializeObject(objInfo) End Function 

Voici ce que je vois de FireBug:

En-têtes de réponse
Serveur: Microsoft-IIS / 5.1
Date: jeu., 09 avril 2009 21:43:59 GMT
jsonerror: true
Cache-Control: privé
Type de contenu: application / json; jeu de caractères = utf-8
Longueur du contenu: 1331

POST: “{\” ID \ “: \” 4 \ “}”

RÉPONSE:

{“Message”: “Impossible de convertir un object de type \ u0027System.Ssortingng \ u0027 en type \ u0027System.Collections .Generic.IDictionary`2 [System.Ssortingng, System.Object] \ u0027”, “StackTrace”: “dans System. Web.Script.Serialization .ObjectConverter.ConvertObjectToTypeInternal (Objet o, Type, sérialiseur JavaScriptSerializer, Boolean throwOnError, Object & convertObject) à System.Web.Script.Serialization.ObjectConverter.ConvertObject (Haut , Boolean throwOnError, Object & convertObject) \ r \ n à System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType (Objet o, Type, sérialiseur JavaScriptSerializer) \ r \ n à System.Web.Script.Serialization.JavaScriptSerializer. Sérialiseur JavaScriptSerializer, Entrée de chaîne, Type, Int32 depthLimit) \ r \ n à System.Web.Script.Serialization.JavaScriptSerializer .Deserialize [T] (Entrée de chaîne) \ r \ n à System.Web.Script.Services.RestHandler. GetRawParamsFromPostRequest (contexte HttpContext, Sérialiseur JavaScriptSerializer) dans System.Web.Script.Services.RestHandler .GetRawParams (WebServiceMethodData, méthodeData, Contexte HttpContext) dans System.Web.Script.Services .RestHandler.ExecuteWebServiceCall , “ExceptionType”: “System.InvalidOperationException”}

Quelqu’un a des idées à ce sujet? Merci!!

Article rapide:

votre variable params var params = '{ID:' + rowid + '}'; est une chaîne.

Donc, la ligne: data: JSON.ssortingngify(params), est redondante (ou devrait l’être). Il suffit de définir les data: params,

Ensuite, sur votre méthode Web, vous convertissez votre résultat en chaîne JSON et vous le renvoyez sous forme de chaîne. Si votre classe de méthode Web possède l’atsortingbut ScriptMethod, vous n’avez pas besoin de le faire. Il vous suffit de renvoyer les données sous le type natif et Asp.Net effectuera la conversion en JSON pour vous.

Vous pouvez lire les articles suivants: http://elegantcode.com/2009/02/21/javascript-arrays-via-jquery-ajax-to-an-aspasp-webmethod/

http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/

En plus de ce qui précède, il est utile de vérifier que vous ne «codifiez» pas le tableau JSON plus d’une fois.

J’ai accidentellement appelé JSON.ssortingngify () sur un tableau déjà sérialisé, ce qui posait un problème similaire à celui que l’OP avait reçu.

c’est à dire

 var arr = JSON.ssortingngify({ id: elementID, name: Name }); .... $.ajax({ ... data: JSON.ssortingngify(arr), ... }); 

Dans ce cas, changer l’initialisation de la variable arr en

 var arr = { id: elementID, name: Name }; 

résolu mon problème. 🙂