2010-07-02 24 views
15

Estoy usando jQuery para publicar JSON en un servidor Java, pero creo que mi JSON debe estar equivocado. He aquí un ejemplo de mis datos y cómo me lo envío:Formateo JSON (Envío de JSON a través de la publicación jQuery AJAX al servidor Java/Wicket)

var lookup = { 
    'name': name, 
    'description': description, 
    'items': [{ 
     'name': itemName, 
     'value': itemValue 
    }] 
} 

$.ajax({ 
    type: 'post', 
    data: lookup, 
    dataType: 'json' 
}); 

estoy usando AbstractAjaxBehavior de Wicket para recibir los datos y me gustaría obtener una sola cadena JSON que puedo analizar. Cuando consigo un mapa de los parámetros pasados, el conjunto de claves es el siguiente:

items[0][name], 
description, 
name, 
items[0][value], 

Obviamente yo puede conseguir fácilmente los valores para el nombre y la descripción, pero la clave para mi serie de artículos está en mal estado. Estoy seguro de que es algo simple, pero parece que sigo corriendo la solución. ¿Alguna sugerencia? ¡Gracias!

+0

Hola Podría publicar su código Wicket AjaxBehavior. Tengo un problema (http://stackoverflow.com/questions/4976244/using-wicket-abstractajaxbehavior-with-jquery-ajax) porque mi onRequest() no parece estar recibiendo ningún dato. Gracias – user193116

Respuesta

44

usted tiene que utilizar JSON.stringify:

$.ajax({ 
    type: 'post', 
    data: JSON.stringify(lookup), 
    contentType: 'application/json', 
    dataType: 'json' 
}); 

También debe especificar 'application/json' como el contentType. De forma predeterminada, jQuery serializará los objetos con la aplicación/x-www-form-urlencoded (incluso si contentType es application/json '). Entonces tienes que hacerlo manualmente.

EDITAR: La clave para 'publicar' debe ser tipo, no método.

+1

jQuery agrega automáticamente el tipo de contenido como application/json cuando especifica el tipo de datos como json, ¿no es así? Sin embargo, tuve que codificar mi JSON, lo que resolvió mi problema. Gracias por atrapar eso! Además, si desea que sus datos vuelvan como un valor de parámetro y no como una clave, envíela así: 'data: {'lookup': JSON.stringify (lookup)}' – Jared

+5

@Jared, no. 'dataType' especifica qué esperas que envíe el servidor. 'contentType' es el tipo de contenido * you're * sending, y jQuery no lo cambiará en función de dataType. Y '{'lookup': JSON.stringify (lookup)}' no es del todo correcto. Si la búsqueda es '{foo:" bar "}', se codificará en URL a algo como 'lookup =% 7B% 22foo% 22% 3A% 22bar% 22% 7D' Obviamente, este no es un documento JSON válido. Cuando publicas application/json, no usas la codificación url. Creo que esto podría estar conectado a usted poniendo 'method: 'post''. Debería ser tipo: 'publicar'. El método se ignora y el valor predeterminado es GET. –

+0

¡Ah, excelente explicación! ¡Gracias! – Jared

Cuestiones relacionadas