pasando tipo complejo como datos a la publicación jquery ajax

Mi clase de modelo de datos se ve a continuación:

[DataContract] Public class Order {[DataMember] public string Id {get; colocar; } [DataMember] cadena pública AdditionalInstructions {get; colocar; } [DataMember] public double TotalAmount {get; colocar; } [DataMember] Public DateTime OrderDate {get; colocar; } [DataMember] Cliente público Cliente {get; colocar; } [DataMember] public OrderedProduct OrderedProduct {get; colocar; }} [DataContract] public class OrderedProduct {[DataMember] public int Id {get; colocar; } [DataMember] Nombre de la cadena pública {get; colocar; } [DataMember] doble precio público {get; colocar; } [DataMember] public int Cantidad {get; colocar; }} [DataContract] clase pública Cliente {[DataMember] cadena pública FirstName {get; colocar; } [DataMember] cadena pública Apellido {get; colocar; }}

Mi contrato de operación WCF es:

[WebInvoke (ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] [OperationContract] string SaveOrder (orden de pedido);

Mi llamada ajax se ve así:

function SaveOrder () {var orderJson = {AdditionalInstructions: $ ("span: first"). text (), Customer: {FirstName: $ ("# firstName"). val (), LastName: $ ("# lastName") .val ()}, Producto pedido: {Id: $ ("# listadeproductos"). val (), Cantidad: $ ("# cantidad"). val ()}}; // la publicación en su servicio web o página $ .ajax ({type: "POST", // GET o POST o PUT or DELETE verbo url: "http: // localhost: 14805 / OrderService.svc / SaveOrder", // Ubicación de los datos del servicio: orderJson, // Datos enviados al servidor contentType: "application / json; charset = utf-8", // tipo de contenido enviado al servidor dataType: "json", // Formato de datos esperado del servidor processdata: falso, // Verdadero o falso éxito: función (resultado) {// En alerta de llamada de servicio exitosa (resultado);}, error: función (resultado) {// Cuando falla la llamada de servicio alerta ('Error de llamada de servicio:' + resultado .status + '' + result.statusText);}}); }

Pero cuando hago esta llamada, obtengo un 400: estado de solicitud incorrecta. Así es como se ve el encabezado en Google Chrome:

URL de solicitud: http: // localhost: 14805 / OrderService.svc / SaveOrder Método de solicitud: Código de estado POST: 400 Encabezados de solicitud de solicitud incorrecta Aceptar: application / json, text / javascript, * / *; q = 0.01 Accept-Charset: ISO-8859-1, utf-8; q = 0.7, *; q = 0.3 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US, en; q = 0.8 Conexión: Keep-Alive Content-Length: 165 Content-Type: application / json; charset = UTF-8 Host: localhost: 14805 Origen: http: // localhost: 14805 Referer: http: // localhost: 14805 / index.html User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 6.1; en- EE. UU.) AppleWebKit / 534.16 (KHTML, como Gecko) Chrome / 10.0.648.127 Safari / 534.16 X-Requested-With: XMLHttpRequest Request Payload AdditionalInstructions = doble-clic + aquí + para + agregar + notas! 5BLastName% 5D = fdsa & OrderedProduct% 5BId% 5D = 5 & OrderedProduct% 5BQuantity% 3D = 5 Encabezados de respuesta Control de caché: privado Conexión: Cerrar Contenido-Longitud: 5 Tipo de contenido: texto / html Fecha: Lunes, 12 de marzo de 1647 07:2011: 19 Servidor GMT: Servidor de desarrollo ASP.NET / 14 X-AspNet-Versión: 57

Hágame saber cómo puedo rectificar esto.

Gracias, Arun

preguntado el 07 de marzo de 11 a las 16:03

Como nota: su JSON no es válido. También querrá que una matriz con nombre pase al marco WCF (así que envuelva todo en un {'Order': {...}} -

1 Respuestas

Hubo dos problemas para resolver esto. 1. Algún error en mi servicio en sí (este es mi problema) 2. Tuve que hacer con JSON.stringify () en el objeto orderJson.

function SaveOrder () {var orderJson = {AdditionalInstructions: $ ("span: first"). text (), Customer: {FirstName: $ ("# firstName"). val (), LastName: $ ("# lastName") .val ()}, Producto pedido: {Id: $ ("# listadeproductos"). val (), Cantidad: $ ("# cantidad"). val ()}}; // la publicación en su servicio web o página $ .ajax ({type: "POST", // GET o POST o PUT or DELETE verbo url: "http: // localhost: 14805 / OrderService.svc / SaveOrder", // Ubicación de los datos del servicio: JSON.stringify (orderJson), // Datos enviados al servidor contentType: "application / json; charset = utf-8", // tipo de contenido enviado al servidor dataType: "json", // Datos esperados formato del servidor processdata: falso, // Verdadero o falso éxito: función (resultado) {// En llamada de servicio exitosa RedirectToMvcApp (resultado);}, error: función (solicitud, error) {// Cuando falla la llamada de servicio alerta (' Error en la llamada de servicio: '+ request.status +' '+ request.statusText);}}); }

respondido 08 mar '11, 06:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.