2013-04-04 8 views
5

Chcę przekazać obiekt Json, który zawiera obiekty zagnieżdżone z mojego klienta na mój serwer.jak poprawnie przekazać obiekt json do serwera kolby przy użyciu jquery ajax

po stronie klienta, moja struktura danych wygląda następująco:

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' 

i moje wezwanie ajax wygląda następująco:

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

po zaksięgowaniu te dane do serwera, który jest prowadzony za pomocą Python, używam obiektu request.form do sprawdzenia, co zostało napisane od klienta. chciałbym dane mają być skonstruowane w ten sam sposób, jednak jest to wyjście na serwerze:

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')]) 

jak widać, odpowiedź [ „goście”] Obiekt został spłaszczony, a wszyscy jej dzieci, takie jak:

'goście [2] [najpierw]'

... to tylko struny, a nie elementów ich odpowiedzi dominującej [ 'gości'].

jest lepszy sposób na wysłanie tego bloku danych z mojego klienta do mojego serwera i utrzymanie jego struktury poprawnie?

dziękuję!

Odpowiedz

11

Można wysłać swój przedmiot jako ciąg JSON:

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); 
}); 

a następnie użyć request.json do niego dostęp.

+0

Totally Works! Dzięki. Jedna rzecz, metoda .done() nigdy się nie uruchamia, nawet jeśli widzę dane na moim serwerze, a kiedy sprawdzam kartę sieciową chrome dev, jest POST 200 OK dla tego żądania. – SeanPlusPlus

+0

Nie przejmuj się powyższym komentarzem. Potrzebuję jsonify mojej odpowiedzi z serwera. Jeszcze raz dziękuję za pomoc w tej sprawie. – SeanPlusPlus

0

Po stronie klienta należy przekonwertować obiekt javascript na ciąg json. Aby to zrobić, można użyć to:

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

Następnie po stronie serwera, trzeba przekonwertować obiekt do dictionnary python za pomocą modułu json:

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

my_new_object jest teraz dictionnary python i możesz robić, co chcesz, dzięki niemu

Powiązane problemy