Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么可以';我是否将相对复杂的JS对象发布到Django视图?_Javascript_Jquery_Json_Django_Post - Fatal编程技术网

Javascript 为什么可以';我是否将相对复杂的JS对象发布到Django视图?

Javascript 为什么可以';我是否将相对复杂的JS对象发布到Django视图?,javascript,jquery,json,django,post,Javascript,Jquery,Json,Django,Post,使用Django 1.5.5,我试图使用$将JS对象发布到我的视图中 JavaScript var-oDatas={'csrfmiddlewaretoken':$.cookie('csrftoken'); oDatas['2']=['4','8','15','16','23','42']; $.post('/my/ajax/url/',oDatas) .完成(功能(响应、状态、oXHR){ //处理成功的请求 }) .fail(函数(oXHR、sStatus、SERRORSHOUND){ //处

使用Django 1.5.5,我试图使用
$将JS对象发布到我的视图中

JavaScript
var-oDatas={'csrfmiddlewaretoken':$.cookie('csrftoken');
oDatas['2']=['4','8','15','16','23','42'];
$.post('/my/ajax/url/',oDatas)
.完成(功能(响应、状态、oXHR){
//处理成功的请求
})
.fail(函数(oXHR、sStatus、SERRORSHOUND){
//处理失败的请求
});
看法
@require\u AJAX
@需要职位
def get_bacon(请求):
datas=request.POST
打印数据
响应=HttpResponse('asdf',状态=200)
返回响应
输出

注意,该键实际上是
'2[]'

问题: 它可以与
oDatas['2']='foobar'配合使用。我错过了什么


相关SO答案
通过ajax发送时,可以尝试使用tasks[]而不是tasks作为参数


在我的例子中,使用
'2[]'
作为我的数据的键。不过听起来确实很恶心。

尝试通过
body
属性访问它

您可能需要解析json对象,如下所示:

import json

def get_bacon(request):
    datas = json.loads(request.body)
编辑: 抱歉,我忘了提到,您必须在ajax调用中对数据进行字符串化

var oDatas = { 'csrfmiddlewaretoken': $.cookie('csrftoken') };
oDatas['2'] = [ '4', '8', '15', '16', '23', '42' ];
$.post('/my/ajax/url/', JSON.stringify(oDatas))
    .done(function(oResponse, sStatus, oXHR) {
        // Handling successful request
    })
    .fail(function(oXHR, sStatus, sErrorThrown) {
        // Handling failed request
    });

我想我在挣扎的是。
request.POST
在这里是一个QueryDict对象。Django(1.5.5),展平任何相对复杂的读取嵌套JS对象

datas=dict(request.POST.iterlists())
data.pop('csrfmiddlewaretoken')
请注意,我之所以使用
iterlists
,只是因为我的QueryDict对象包含列表。否则请使用
iteritems

datas
字典就是这样的Python dict:

import json

def get_bacon(request):
    datas = json.loads(request.body)
{'foods[joe][]:['bacon','chicken',],
“食品[clara][]:[“生菜”、“酸奶”、“奥利奥”、],]

request.body
返回带有转义字符的字符串化对象。当我把它传递给
json.loads
,我得到
ValueError:Extra data:line 1 column 2-line 1 column 117(char 1-116)
。啊,这比我的解决方案干净多了。我想知道
request.POST.getlist(key)
是否适合你。是吗?对我来说,改变JS对象键并在每个深度级别上添加一组大括号看起来非常肮脏。老实说,我没有看链接的答案。我刚刚看到你有一个答案,就是用“2[]”作为键。是的,就是这样。但是我实际的
oDatas
并不像我原来的帖子中描述的那样简单(它实际上是一个包含我的CSRF令牌和另一个对象的对象)。用
'foo[bar][]'
作为Python口述的键不是很方便(bar
部分对应于我发布的父对象中对象的所有键。不知道这是否足够清楚,英语不是我的母语。