3

我创建了一个应该由 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']}>

如何正确处理我的对象?

4

2 回答 2

5

您可以通过使用 json 编码来解决它:

用javascript编码

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

在视图中解码

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

这样你就可以避免 3rd 方解析器:)

于 2013-10-13T13:09:56.407 回答
0

好的,我这样解决了:

将我的 Ajax 请求从 GET 更改为 POST,
然后获取 CSRF_token, 使用解析器解析我的对象, 最后更改了我的 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...
于 2013-10-13T12:28:27.830 回答