如何使用jquery ajax正确地将json对象传递给flask服务器
问题描述:
我想将包含来自客户端的嵌套对象的json对象传递给我的服务器。如何使用jquery ajax正确地将json对象传递给flask服务器
在客户端,我的数据结构是这样的:
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);
});
此数据发布到我的服务器,这是使用后运行蟒蛇烧瓶,我使用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')])
,你可以看到,响应[“客人”]对象得到平滑,并将其所有孩子,如:
'客人[2] [首页]'
...只是一个字符串,而不是他们的父母响应[ '客人']的元素。
有没有更好的方法将这个数据块从我的客户端发送到我的服务器,并正确地维护其结构?
谢谢!
答
你可以把你的对象作为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
来访问它。
答
在客户端,您需要将该javascript对象转换为json字符串。要做到这一点,您可以使用此:
JSON.stringify(my_object) // This will return a string that you can pass in you ajax request
然后在服务器端,您需要使用JSON模块对象转换为蟒蛇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 ,你可以随心所欲地做任何事
完全有效!谢谢。有一件事是.done()方法永远不会执行,即使我可以在服务器上看到数据,并且当我检查chrome dev网络选项卡时,此请求也有POST 200 OK。 – SeanPlusPlus 2013-04-04 04:33:00
不要在意上面的评论。我需要从服务器中声明我的响应。再次感谢您的帮助。 – SeanPlusPlus 2013-04-04 04:39:32