2010-07-02 16 views
15

Sto usando jQuery per inviare JSON su un server Java, ma penso che il mio JSON debba essere sbagliato. Ecco un esempio dei miei dati e come sto inviarlo:Formattazione JSON (invio JSON tramite jQuery posta AJAX su server Java/Wicket)

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

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

sto usando AbstractAjaxBehavior di Wicket per ricevere i dati e vorrei ottenere una singola stringa JSON che posso analizzare. Quando ricevo una mappa dei parametri passati, il set di tasti è simile al seguente:

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

Ovviamente può facilmente ottenere i valori per il nome e la descrizione, ma la chiave per la mia serie di articoli è incasinato. Sono sicuro che sia qualcosa di semplice, ma mi sembra di continuare a correre intorno alla soluzione. Eventuali suggerimenti? Grazie!

+0

Ciao Potresti pubblicare il tuo codice Wicket AjaxBehavior. Ho un problema (http://stackoverflow.com/questions/4976244/using-wicket-abstractajaxbehavior-with-jquery-ajax) in quanto il mio onRequest() non sembra ricevere alcun dato. Grazie – user193116

risposta

44

devi usare JSON.stringify:

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

si dovrebbe anche specificare 'application/json' come il contentType. Per impostazione predefinita jQuery serializzerà gli oggetti con application/x-www-form-urlencoded (anche se contentType è application/json '). Quindi devi farlo manualmente.

MODIFICA: la chiave per "post" deve essere di tipo, non di metodo.

+1

jQuery aggiunge automaticamente il tipo di contenuto come application/json quando si specifica il dataType come json, non è vero? Però ho dovuto stringificare il mio JSON, che ha risolto il mio problema. Grazie per averlo capito! Inoltre, se vuoi che i tuoi dati tornino come valore di parametro e non come chiave, invialo in questo modo: 'data: {'lookup': JSON.stringify (lookup)}' – Jared

+5

@ Jared, no. 'dataType' specifica cosa si aspetta che il server invii. 'contentType' è il tipo di contenuto * che stai * inviando, e jQuery non lo cambierà in base a dataType. E '{'lookup': JSON.stringify (lookup)}' non è del tutto corretto. Se la ricerca è '{foo:" bar "}", sarà codificata in url con qualcosa come 'lookup =% 7B% 22foo% 22% 3A% 22bar% 22% 7D' Questo ovviamente non è un documento JSON valido. Quando pubblichi un'applicazione/JSON, non usi la codifica url. Penso che questo potrebbe essere collegato a te mettendo 'metodo: 'post''. Dovrebbe essere il tipo: "post". Il metodo viene ignorato e il valore predefinito è GET. –

+0

Ah, ottima spiegazione! Grazie! – Jared