2009-04-09 41 views
13

Tengo un método web simple y una llamada ajax y continúo recibiendo un error que dice que no puede convertir una cadena a un objeto IDictionary ???Pasando el parámetro a WebMethod con jQuery Ajax

Aquí está la llamada 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) { . . . . 

Aquí es el 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 

Esto es lo que veo de FireBug:

encabezados de respuesta
Servidor: Microsoft-IIS /5.1
Fecha: Jue, 09 de Abr 2009 21:43:59 GMT
jsonerror: true
Cache-Control: privado
Content-Type: application/json; charset = UTF-8
Content-Length: 1331

mensaje: "{\" ID \ ": \" 4 \ "}"

RESPUESTA:

{ "mensaje": "No se puede convertir objeto de tipo \ u0027System.String \ u0027 para escribir \ u0027System.Collections .Generic.IDictionary`2 [System.String, System.Object] \ u0027 "," StackTrace ":" en System.Web.Script.Serialization .ObjectConverter.ConvertObjectToTypeInternal (Object o, Type type, serializador de JavaScriptSerializer, Boolean throwOnError, Object & convertedObject) \ r \ n en System.Web.Scri pt.Serialization.ObjectConverter.ConvertObjectToTypeMain (Object o, Tipo Tipo, JavaScriptSerializer serializador, Boolean throwOnError, objeto & convertedObject ) \ r \ n en System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType (Object o, Tipo Tipo, JavaScriptSerializer serializador) \ r \ n en System.Web.Script.Serialization.JavaScriptSerializer.Deserialize (serializador de JavaScriptSerializer , entrada de cadena, tipo de tipo, profundidad de profundidad Int32) \ r \ n en System.Web.Script.Serialization.JavaScriptSerializer .Deserialize [T] (Entrada de cadena) \ r \ n en System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest (contexto de HttpContext, serializador de JavaScriptSerializer) \ r \ n en System.Web.Script.Services.RestHandler .GetRawParams (WebServiceMethodData métodoD ATA, HttpContext contexto) \ r \ n en System.Web.Script.Services .RestHandler.ExecuteWebServiceCall (contexto HttpContext, WebServiceMethodData methodData)", "ExceptionType" : "System.InvalidOperationException"}

Alguien tiene alguna idea ¿sobre esto? ¡¡Gracias!!

Respuesta

30

elemento rápida:

sus parametros variables var params = '{ID:' + rowid + '}'; es una cadena.

Entonces la línea: data: JSON.stringify(params), es redundante (o debería ser). Simplemente configure data: params,

A continuación, en su método web, convierta su resultado en una cadena JSON y lo devuelva como una cadena. Si su clase de método web tiene el atributo ScriptMethod, no necesita hacer eso. Simplemente devuelva los datos como el tipo nativo y Asp.Net hará la conversión a JSON por usted.

que se puede leer los siguientes artículos: 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/

+4

Eres el hombre. ¡Muchas gracias, Chris! Agregué esto: var jsonText = JSON.stringify ({ID: rowid}); después de leer tu artículo. He leído un montón de artículos que muestran los parámetros que pasan con comillas. La tuya es la primera que he leído y explicada Y FIJA. Mucho gracias! –

+0

Me alegro de haber ayudado. –

1

Además de lo anterior, vale la pena revisar para asegurarse de que usted no es 'stringifying' la matriz JSON más de una vez.

Accidentalmente llamé a JSON.stringify() en una matriz que ya había sido serializada, lo que arrojó un problema similar al que recibió el OP.

decir

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

En este caso, el cambio de la arr inicialización de variables a

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

resuelto mi problema. :)

Cuestiones relacionadas