gpt4 book ai didi

javascript - Django Python : Can't access JS object passed via AJAX from Python QueryDict

转载 作者:行者123 更新时间:2023-11-30 11:14:28 26 4
gpt4 key购买 nike

在我正在构建的这个 Django 项目中,我使用 AJAX 通过 javascript 和 python 在服务器和客户端之间来回传输数据。为了方便起见,我在 JS 中设计了一个 config 对象来传递服务器和响应 JS 需要知道的重要参数。在 Python 方面,我无法访问此对象,因为它是 None,但在发送之前将对象打印到 JS 控制台,并将 POST 对象打印到 Py 控制台,这两者都表明存在一些东西。我不明白为什么访问 QueryDict 中的 JS 对象(不是成员)返回 None。

# JavaScript   

var objConfig = {
param1: "more text data",
param2: "more text data",
param3: "more text data",
};

console.log(objConfig);

$.ajax({
type: "POST",
url: url,
data: {
csrfmiddlewaretoken: strCsrfToken,
strTextData: strTextData,
objConfig: objConfig
},
success: callback
});

# JS console output:
# Object {param0: "more text data", param1: "more text data", param2: "more text data"}


# Python
def DoTheThing(response):
print(response.POST.get('strTextData'))
print(response.POST.get('objConfig'))
print(response.POST)
print(response.POST.get('objConfig[param0]'))

# Python console output:
# Text data being sent to server.
# None
# <QueryDict: {'csrfmiddlewaretoken': ['...'], 'strTextData': ['Text data being sent to server.'], 'objConfig[param0]': ['more text data'], 'objConfig[param1]': ['more text data'], 'objConfig[param2]': ['more text data']}>
# more text data

注意 print(response.POST.get('objConfig')) 如何打印 None,但是 print(response.POST.get('objConfig[ param0]')) 打印的正是我所期望的。我还在 QueryDict 中注意到它似乎没有像我期望的那样将 objObject 表示为一个对象。我理解 JS 和 Py 对象之间的差异,但它使用数组索引运算符单独列出了对象的每个成员,我不确定为什么或如何正确使用它。

我不能只获取整个 objConfig 对象,我需要单独访问每个成员吗?此外,尝试在 HttpResponse 中发送 objConfig 将如何工作?我设计了这种对象模式来节省时间和文本空间,分别写出每个参数,以了解我希望如何在服务器和客户端之间处理这些数据。

最佳答案

$.ajax()的默认Content-Type'application/x-www-form-urlencoded; charset=UTF-8' 改成application/json应该可以解决问题。

例子:

var data = {
strTextData: strTextData,
objConfig: objConfig
}

$.ajax({
type: "POST",
url: url,
contentType : "application/json; charset=utf-8",
headers: { "X-CSRFToken": strCsrfToken },
data: JSON.stringify(data),
success: callback
});

查看有关 Jquery documentation 的更多信息

在你看来你应该:

import json
...
# on the view
data = json.loads(request.body)

关于javascript - Django Python : Can't access JS object passed via AJAX from Python QueryDict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52208875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com