2013-04-04 3 views
5

Ich möchte ein JSON-Objekt übergeben, das verschachtelte Objekte von meinem Client zu meinem Server enthält.Wie ein JSON-Objekt korrekt übergeben wird mit JQuery AJAX

auf der Client-Seite, sieht meine Datenstruktur wie folgt aus:

var response = {}; 
response['screening'] = '1'; 
response['assistance'] = 'wheelchair access'; 
response['guests'] = {}; 
response['guests']['1'] = {} 
response['guests']['1']['first'] = 'John' 
response['guests']['1']['last'] = 'Smith' 
response['guests']['2'] = {} 
response['guests']['2']['first'] = 'Dave' 
response['guests']['2']['last'] = 'Smith' 

und meine Ajax-Aufruf sieht wie folgt aus:

$.ajax({ 
    type: "POST", 
    url: window.location.pathname, 
    data: response 
}).done(function(msg) { 
    alert("Data Saved: " + msg); 
}); 

nachdem diese Daten auf meinen Server veröffentlichen, die unter Verwendung von ausgeführt wird Ich benutze das Objekt request.form, um zu sehen, was vom Client gepostet wurde. i die Daten möchten die gleiche Art und Weise strukturiert werden, dies ist jedoch der Ausgang auf dem Server:

ImmutableMultiDict([('guests[1][first]', u'John'), ('screening', u'2'), ('guests[2][last]', u'Smith'), ('guests[2][first]', u'Dave'), ('assistance', u'wheelchair access'), ('guests[1][last]', u'Smith')]) 

wie Sie sehen können, ist die Antwort [ ‚Gäste‘] Objekt wurde abgeflacht, und alle seine Kinder, wie zum Beispiel:

den Gästen ein [2] [erste]

... sind nur Zeichenketten, nicht Elemente ihrer Eltern Reaktion [ 'Gäste'].

Gibt es eine bessere Möglichkeit, diesen Datenblock von meinem Client an meinen Server zu senden und seine Struktur korrekt zu verwalten?

danke!

Antwort

11

Sie könnten Ihr Objekt als JSON-String senden:

var data = { 
    screening: '1', 
    assistance: 'wheelchair access', 
    guests: [ 
     { 
      first: 'John', 
      last: 'Smith' 
     }, 
     { 
      first: 'Dave', 
      last: 'Smith' 
     } 
    ] 
}; 

$.ajax({ 
    type: 'POST', 
    url: window.location.href, 
    data: JSON.stringify(response), 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8' 
}).done(function(msg) { 
    alert("Data Saved: " + msg); 
}); 

Und dann request.json verwenden, darauf zuzugreifen.

+0

Totally Works! Vielen Dank. Eine Sache, die .done() -Methode wird nie ausgeführt, obwohl ich die Daten auf meinem Server sehen kann, und wenn ich die Chrome-Dev-Netzwerk-Registerkarte überprüfen, gibt es einen POST 200 OK für diese Anfrage. – SeanPlusPlus

+0

Vergiss den obigen Kommentar. Ich muss meine Antwort vom Server bestätigen. Danke nochmal für die Hilfe dabei. – SeanPlusPlus

0

Auf der Client-Seite müssen Sie dieses Javascript-Objekt in eine JSON-Zeichenfolge konvertieren. Um dies zu tun, können Sie diese verwenden:

JSON.stringify(my_object) // This will return a string that you can pass in you ajax request 

Dann auf der Server-Seite, müssen Sie das Objekt zu einem Python Dictionnary konvertieren mit dem json-Modul:

import simplejson 
my_new_object = simplejson.loads(my_json) // my_json is my_object from the client (previously called my_object) 

my_new_object ist jetzt ein Python Dictionnary , und Sie können tun, was auch immer Sie damit wollen

Verwandte Themen