2010-07-02 13 views
15

Ich benutze jQuery, um JSON an einen Java-Server zu senden, aber ich denke, dass mein JSON falsch sein muss. Hier ist ein Beispiel für meine Daten und wie ich schicke es:JSON-Formatierung (JSON über jQuery AJAX-Post an Java/Wicket-Server senden)

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

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

Ich verwende Wicket des AbstractAjaxBehavior die Daten zu empfangen und möchte ein einziges JSON-String erhalten, die ich analysieren kann. Wenn ich eine Karte der Parameter übergeben bekommen, sieht das Keyset wie folgt aus:

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

Natürlich kann ich leicht die Werte für Name und Beschreibung, aber der Schlüssel für meine Array von Elementen ist durcheinander. Ich bin mir sicher, dass es etwas Einfaches ist, aber ich scheine immer weiter um die Lösung herum zu laufen. Irgendwelche Vorschläge? Vielen Dank!

+0

Hallo Konnten Sie Ihren Wicket AjaxBehavior Code bekannt geben. Ich habe ein Problem (http://stackoverflow.com/questions/4976244/using-wicket-abstractajaxbehavior-with-jquery-ajax) in dem mein onRequest() scheint keine Daten zu empfangen. Danke – user193116

Antwort

44

Sie haben JSON.stringify zu verwenden:

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

Sie auch 'application/json' als content angeben sollten. Standardmäßig serialisiert jQuery Objekte mit der Anwendung/x-www-form-urlencoded (selbst wenn der contentType die Anwendung/json 'ist). Also musst du es manuell machen.

EDIT: Schlüssel für 'Post' sollte Typ sein, nicht Methode.

+1

jQuery fügt automatisch den Inhaltstyp als application/json hinzu, wenn Sie dataType als json angeben, oder? Ich musste jedoch meinen JSON stringieren, was mein Problem löste. Danke, dass du das erwischt hast! Wenn Sie möchten, dass Ihre Daten als Parameterwert und nicht als Schlüssel zurückgegeben werden, senden Sie sie wie folgt: 'data: {'lookup': JSON.stringify (lookup)}' ' – Jared

+5

@Jared, no. 'dataType' gibt an, was vom Server erwartet wird. 'contentType' ist der Inhaltstyp, den Sie * senden, und jQuery ändert es nicht basierend auf dataType. Und '{'lookup': JSON.stringify (lookup)}' ist nicht ganz korrekt. Wenn die Suche '{foo:" bar "}' ist, wird das URL-codiert zu etwas wie 'Nachschlagen =% 7B% 22foo% 22% 3A% 22bar% 22% 7D' Das ist offensichtlich kein gültiges JSON-Dokument. Wenn Sie die Anwendung/json veröffentlichen, verwenden Sie keine URL-Codierung. Ich denke, das könnte mit dir zusammenhängen, wenn du 'method: 'post''estest. Es sollte Typ sein: 'Post'. Methode wird ignoriert, und der Standardwert ist GET. –

+0

Ah, ausgezeichnete Erklärung! Vielen Dank! – Jared