0

我正在通过 Jquery ajax 发布一个如下所示的帖子:

$.ajax({
    type: 'POST',
    url: "/sandbox/read_demands/",
    data: {
        "partner_ref": "PH",
        "return_field": ["summary", "details"]
    },
    success: [read_demands_response],
    dataType: 'json'
});

然后,我使用一个简单的 Django 视图在服务器端接收数据,该视图仅将 request.POST 打印到日志中。然后数据如下所示:

{u'return_field[]': [u'summary', u'details'], u'partner_ref': [u'PH']}

如您所见,键“return_field”已变为“return_field[]”,“partner_ref”的值现在是一个列表。到底是怎么回事?我是否在 jquery 帖子中遗漏了一些明显的东西,导致我的数据格式错误,或者你认为这个错误来自其他地方吗?我试图排除不同的可能性,直到找到问题的原因。

这是 jquery 1.8.2 和 Django 1.4 顺便说一句。

4

2 回答 2

2

第一个只是 jQuery 是 jQuery。出于他们自己最熟悉的原因,jQuery 的制造者认为 PHP 是编写服务器端应用程序的唯一方法,并且 PHP 期望具有多个值的字段具有[]后缀 - 因此,如果您不提供后缀,它会添加它。你只需要像在 Django 中那样使用它。

但是,第二个不是错误。这就是 Django QueryDict 的工作方式:任何值都可以有多个项目,因此它们将始终表示为一个列表。但是,request.POST['partner_ref']将正确地给出单个值。事实上,要访问另一个键的两个值,您需要执行request.POST.getlist('return_field[]').

编辑:正如评论中指出的,$.ajaxSettings.traditional = true;修复了 jQuery 问题。

于 2012-10-24T08:07:04.863 回答
0

我一直在处理同样的问题,并发现了这个相关的问题。

如何获取通过 Ajax 发布的 Django 中的数组

答案建议使用

request.GET.getlist('data')
于 2013-03-21T19:39:20.573 回答