Django 解析参数

0 投票
2 回答
887 浏览
提问于 2025-04-16 08:27

我正在使用AJAX请求从服务器获取数据:

$.ajax({
 type: 'POST',
 url: '/simple/gd/',
 dataType: 'json',
 data: {t : "PL"},
 success: function(data) {
 var newd = data['t'];
  alert('Load was performed: ' + newd);
 }
});

在服务器上,urls.py文件是:

(r'^simple/gd/(?P<data>.*)$', 'simple.views.getData'),

发送到服务器的URL是 http:/localhost/simple/gd/?t=PL

但是出于某种原因,我无法让getData(request, data)函数接收到"?t=PL"或者把"t=PL"作为'data'参数传递。'data'参数总是为空。

我哪里做错了呢?

2 个回答

0

这是因为 t=PL 并不是路径的一部分,它是查询字符串(简单来说,路径是 ? 之前的部分,而查询字符串是 ? 之后的部分)。

我个人建议你可以这样修改你的 urls.py 文件:

(r'^simple/gd/$', 'simple.views.getData'),

然后,把你的视图函数从类似下面的形式:

def getData(request, data):
    print data

改成类似下面的形式:

def getData(request):
    print request.GET.get('t', None)
1

如果你使用的是类型为 'POST' 的请求,那么数据就不会像查询字符串那样附加到网址后面。

相反,这些数据会被放在请求对象的 POST 字典里。

所以,为了传回一些能触发你警告的内容,你需要生成一个可以被理解为 JSON 数据的字符串,大概是这样的:

(r'^simple/gd/$', 'simple.views.getData'),

def getData(request):
    posted_t = request.POST['t']
    # Do some stuff with posted_t
    server_side_var = "Yay"
    return HttpResponse(u"{t:%s}" % server_side_var)

撰写回答