如何使用jquery ajax将json对象正确传递给flask服务器

时间:2013-04-04 02:58:03

标签: javascript python ajax json flask

我想传递一个json对象,其中包含从我的客户端到我的服务器的嵌套对象。

在客户端,我的数据结构如下所示:

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'

我的ajax调用如下:

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

将此数据发布到使用python flask运行的服务器后,我使用request.form对象检查从客户端发布的内容。我想要以相同的方式构建数据,但是,这是服务器上的输出:

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

正如您所看到的,响应['guests']对象被夷为平地,并且它的所有子对象都是如此:

'客人[2] [第一]'

...只是一个字符串,而不是其父回复的元素['来宾']。

有没有更好的方法将这个数据块从我的客户端发送到我的服务器,并正确维护其结构?

谢谢!

2 个答案:

答案 0 :(得分:12)

您可以将对象作为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);
});

然后使用request.json访问它。

答案 1 :(得分:0)

在客户端,您需要将该javascript对象转换为json字符串。为此,您可以使用:

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

然后在服务器端,您需要使用json模块将该对象转换为python dictionnary:

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

my_new_object现在是一个python dictionnary,你可以随心所欲地做任何事情