Passage de paramètre à WebMethod avec jQuery Ajax
J'ai une simple méthode web et ajax appel et continuer à recevoir une erreur en disant qu'il ne peut pas convertir une chaîne en un IDictionary objet???
Voici l'appel ajax:
var params = '{"ID":"' + rowid + '"}';
$.ajax({
url: 'EDI.asmx/GetPartnerDetails',
type: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(params),
dataType: "json", //not json . let me try to parse
success: function(msg, st) { . . . .
Ici est le webMethod:
<WebMethod()> _
Public Function GetPartnerDetails(ByVal ID As String) As String
'Dim objParam As IDictionary = CType(JsonConvert.DeserializeObject(ID), IDictionary)
'Dim rowID As String = 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
Server: Microsoft-IIS/5.1
Date: Thu, 09 Apr 2009 21:43:59 GMT
jsonerror:vrai
Cache-Control:private
Content-Type:application/json; charset=utf-8
Content-Length:1331
POST": "{\"ID\":\"4\"}"
RÉPONSE:
{"Message":"Impossible de convertir l'objet de type \u0027System.String\u0027 de type \u0027System.Collections
.Génériques.IDictionary`2[Système.Chaîne,Système.Objet]\u0027","StackTrace":" au Système.Web.Script.La sérialisation
.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type de type de, JavaScriptSerializer sérialiseur, Boolean
throwOnError, Objet& convertedObject)\r\n au Système.Web.Script.La sérialisation.ObjectConverter.ConvertObjectToTypeMain
(Object o, Type de type de, JavaScriptSerializer sérialiseur, Boolean throwOnError, Objet& convertedObject
)\r\n au Système.Web.Script.La sérialisation.ObjectConverter.ConvertObjectToType(Object o, Type de type de, JavaScriptSerializer
sérialiseur)\r\n au Système.Web.Script.La sérialisation.JavaScriptSerializer.Deserialize(JavaScriptSerializer
sérialiseur, Chaîne d'entrée, Type de type Int32 depthLimit)\r\n au Système.Web.Script.La sérialisation.JavaScriptSerializer
.Désérialiser[T](entrée de Chaîne)\r\n au Système.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest
(HttpContext contexte, JavaScriptSerializer sérialiseur)\r\n au Système.Web.Script.Services.RestHandler
.GetRawParams(WebServiceMethodData methodData, HttpContext contexte)\r\n au Système.Web.Script.Services
.RestHandler.ExecuteWebServiceCall(HttpContext contexte, WebServiceMethodData methodData)","ExceptionType"
:"Le système de.InvalidOperationException"}
N'importe qui ont des idées à ce sujet? Merci!!
Vous devez vous connecter pour publier un commentaire.
Rapide item:
votre variable params
var params = '{ID:' + rowid + '}';
est une chaîne de caractères.
De sorte que la ligne:
data: JSON.stringify(params),
est redondante (ou devrait être).Juste mettre
data: params,
Ensuite, sur votre site web méthode, vous convertir le résultat d'une chaîne JSON et de retour que comme une chaîne de caractères. Si vous web méthode de classe a ScriptMethod attribut, vous n'avez pas besoin de le faire.
Il suffit de retourner les données comme le type natif, et Asp.Net faire 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-aspnet-webmethod/
http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/
En plus de ce qui précède, il convient de vérifier pour vous assurer que vous n'êtes pas 'stringifying" le tableau JSON plus d'une fois.
J'ai accidentellement appelé JSON.stringify() sur un tableau qui avait déjà été sérialisé, qui a jeté un problème similaire à celui de l'OP reçu.
c'est à dire
Dans ce cas, la modification de la arr l'initialisation d'une variable à
résolu mon problème. 🙂