2010-07-02 9 views
15

J'utilise jQuery pour publier JSON sur un serveur Java, mais je pense que mon JSON doit être faux. Voici un exemple de mes données et comment je te l'envoie:Formatage JSON (Envoi de JSON via jQuery AJAX sur un serveur Java/Wicket)

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

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

J'utilise AbstractAjaxBehavior Wicket pour recevoir les données et que vous souhaitez obtenir une seule chaîne JSON que je peux analyser. Quand je reçois une carte des paramètres passés, le keyset ressemble à ceci:

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

Il est évident que je peux facilement obtenir les valeurs pour le nom et la description, mais la clé de ma gamme d'articles est foiré. Je suis sûr que c'est quelque chose de simple, mais je semble continuer à courir autour de la solution. Aucune suggestion? Merci!

+0

Bonjour Pourriez-vous poster votre code Wicket AjaxBehavior. J'ai un problème (http://stackoverflow.com/questions/4976244/using-wicket-abstractajaxbehavior-with-jquery-ajax) en ce que mon onRequest() ne semble pas recevoir de données. Merci – user193116

Répondre

44

Vous devez utiliser JSON.stringify:

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

Vous devez également préciser 'application/json' comme le contentType. Par défaut, jQuery va sérialiser les objets avec l'application/x-www-form-urlencoded (même si le contentType est application/json '). Donc, vous devez le faire manuellement.

EDIT: La clé pour 'post' doit être de type, pas de méthode.

+1

jQuery ajoute automatiquement le type de contenu en tant qu'application/json lorsque vous spécifiez dataType en tant que json, n'est-ce pas? J'ai dû cependant stringifier mon JSON, ce qui a résolu mon problème. Merci d'avoir attrapé ça! En outre, si vous voulez que vos données reviennent en tant que valeur de paramètre et non en tant que clé, envoyez-le comme suit: 'data: {'lookup': JSON.stringify (recherche)}' – Jared

+5

@Jared, no. 'dataType' spécifie ce que vous attendez du serveur à envoyer. 'contentType' est le type de contenu * que vous envoyez *, et jQuery ne le changera pas en fonction de dataType. Et '{'lookup': JSON.stringify (lookup)}' n'est pas tout à fait correct. Si lookup est '{foo:" bar "}', cela sera codé en url à quelque chose comme 'lookup =% 7B% 22foo% 22% 3A% 22bar% 22% 7D' Ce n'est évidemment pas un document JSON valide. Lorsque vous publiez application/json, vous n'utilisez pas d'encodage d'URL. Je pense que cela pourrait être lié à vous en mettant 'method: 'post'. Il devrait être de type: "post". La méthode est ignorée et la valeur par défaut est GET. –

+0

Ah, excellente explication! Merci! – Jared