【问题标题】:Parsing json object sent with Ajax GET method in Django在 Django 中解析使用 Ajax GET 方法发送的 json 对象
【发布时间】:2013-10-13 11:06:04
【问题描述】:

我创建了一个应该由 Django 处理的 Ajax 请求:

var tracks = [{'artist':'xxx', 'track':'yyy', 'duration':100},
              {'artist':'xxx', 'track':'yyy', 'duration':100},
              {'artist':'xxx', 'track':'yyy', 'duration':100}];
$.ajax({
  type: 'GET',
  url: ROOT_URL + '/snv/',
  data: {tracks: tracks},
  dataType: 'json'
}).done(function (data) {
  // do something
}).fail(function (data) {
  // do something else
});

我有一个 Python 函数来检索该数据:

def snv(request):
    for track in request.GET:
        print track

但是这个函数会打印如下内容:

tracks[1][artist]
tracks[0][track]
tracks[0][duration]
tracks[2][artist]
tracks[1][track]
tracks[1][duration]
tracks[2][duration]
tracks[0][artist]
tracks[2][track]

如果我打印 request.GET 我会得到:

<QueryDict: {u'tracks[1][artist]': [u'Artist 02'], u'tracks[0][track]': [u'title 00'], u'tracks[0][duration]': [u'202'], u'tracks[2][artist]': [u'Artist 04'], u'tracks[1][track]': [u'title 02'], u'tracks[1][duration]': [u'506'], u'tracks[2][duration]': [u'233'], u'tracks[0][artist]': [u'Artist 00'], u'tracks[2][track]': [u'title 04']}>

如何正确处理我的对象?

【问题讨论】:

  • 你想要什么样的输出?
  • 我想遍历使用 ajax 发送的数组,并将数组中的每个对象插入数据库。
  • 能否请您展示一下打印request.GET 显示的内容?
  • 好的,编辑了我的帖子...

标签: python ajax django json


【解决方案1】:

可以使用json编码解决:

用javascript编码

data: {tracks: JSON.stringify(tracks)}

在视图中解码

tracks = json.loads(request.POST.get('tracks'))

这样可以避免使用 3rd 方解析器 :)

【讨论】:

  • 谢谢!这对我有用,包括 PUT 方法和复杂的数组项
【解决方案2】:

好的,我是这样解决的:

将我的 Ajax 请求从 GET 更改为 POST,
关注this获取CSRF_token,
使用this解析器解析我的对象,
最后改变了我的 Python 函数:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def startNewVoting(request):
  from querystring_parser import parser
  p = parser.parse(request.POST.urlencode())
  for key, track in p['tracks'].iteritems():
    print track
    # save to db...

【讨论】:

    猜你喜欢
    • 2017-03-20
    • 1970-01-01
    • 2012-06-12
    • 2017-08-16
    • 2014-03-17
    • 2014-05-16
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多