2013-04-04 35 views
5

tôi muốn chuyển một đối tượng json chứa đối tượng lồng nhau từ máy khách của tôi đến máy chủ của tôi.cách truyền đúng đối tượng json vào máy chủ bình bằng cách sử dụng jquery ajax

về phía khách hàng, cấu trúc dữ liệu của tôi trông như thế này:

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' 

và gọi ajax của tôi trông như thế này:

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

sau khi công bố dữ liệu này để máy chủ của tôi, được điều hành sử dụng python flask, tôi sử dụng đối tượng request.form để kiểm tra những gì đã được đăng từ máy khách. tôi muốn các dữ liệu được cấu trúc theo cùng một cách, tuy nhiên, đây là kết quả trên máy chủ:

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

như bạn có thể nhìn thấy, phản ứng [ 'khách'] đối tượng bị san phẳng, và tất cả của nó trẻ em, chẳng hạn như:

khách [2] [đầu tiên] '

... chỉ là một chuỗi, không yếu tố phản ứng cha mẹ của họ [ 'khách'].

có cách nào tốt hơn để gửi khối dữ liệu này từ khách hàng của tôi đến máy chủ của tôi và duy trì cấu trúc của nó đúng cách không?

cảm ơn!

Trả lời

11

Bạn có thể gửi cho đối tượng của bạn như là một chuỗi 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); 
}); 

Và sau đó sử dụng request.json để truy cập nó.

+0

Hoàn toàn hoạt động! Cảm ơn. Một điều tho, phương thức .done() không bao giờ thực hiện, mặc dù tôi có thể thấy dữ liệu trên máy chủ của tôi và khi tôi kiểm tra tab mạng chrome dev, có một POST 200 OK cho yêu cầu này. – SeanPlusPlus

+0

Đừng bận tâm đến nhận xét ở trên. Tôi cần phải giải thích phản hồi của tôi từ máy chủ. Cảm ơn một lần nữa vì đã giúp với điều này. – SeanPlusPlus

0

Ở phía máy khách, bạn cần chuyển đổi đối tượng javascript đó thành chuỗi json. Để làm như vậy, bạn có thể sử dụng này:

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

Sau đó, ở phía máy chủ, bạn cần phải chuyển đổi đối tượng đó đến một dictionnary python bằng cách sử dụng mô-đun 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 bây giờ là một dictionnary python và bạn có thể làm bất cứ điều gì bạn muốn với nó

Các vấn đề liên quan