Javascript 正在尝试从Django解析序列化数据
我想使用Javascript在客户机上做一些事情。我在视图中用JSON序列化模型中的查询集,并将其发送到模板Javascript 正在尝试从Django解析序列化数据,javascript,arrays,json,django,Javascript,Arrays,Json,Django,我想使用Javascript在客户机上做一些事情。我在视图中用JSON序列化模型中的查询集,并将其发送到模板 data = serializers.serialize("json", Profile.objects.filter(user_id=self.request.user)) 我的结论是: var data = '[ { "model": "accounts.profile",
data = serializers.serialize("json", Profile.objects.filter(user_id=self.request.user))
我的结论是:
var data = '[
{
"model": "accounts.profile",
"pk": 14,
"fields": {
"user": 14,
"email_confirmed": true,
"encrypted_private_key": "Z0FBQUFBQmJLQT09",
"public_key": "LS0tLSS0tLQo=",
"salt": "I8rzovcWsKm4G5Pj3E4DMw=="
}
}
]';
当我尝试这样做时:
var data = JSON.parse('{{ data|safe }}');
我犯了一个错误
Uncaught SyntaxError: Unexpected token { in JSON at position 1
有人能帮忙吗?您的字符串包含换行符,所以
var data = JSON.parse('{{ data|safe }}');
这是行不通的。尝试使用反勾号(不确定如何在此处输入),而不是“
但是,如果您已经将数据转储到json,则不需要在JS端解析它,只需这样做即可
var data = {{ data|safe }};
更新:注意,上面的模板变量周围没有引号,上面的内容将变成(在查看源代码中检查):
注意,它周围仍然没有引号。这是有效的Javascript,无需进一步操作(即解析)
update2:要在.js文件中使用此数据,您需要如下更改.js文件:
var some_unique_name = function (data) {
... original code goes here ...
};
在您的html中:
<script src="...your script"></script>
<script>
some_unique_name({{ data|safe }});
</script>
一些唯一的名称({{data}safe});
更新3:以上内容将扩展到(使用浏览器的查看源代码功能检查):
一些独特的名字([
{
“模型”:“accounts.profile”,
“pk”:14,
“字段”:{
“用户”:14,
“电子邮件确认”:正确,
“加密私钥”:“Z0FBQUFBQmJLQT09”,
“公钥”:“LS0tLSS0tLQo=”,
“盐”:“I8rzovcWsKm4G5Pj3E4DMw=”
}
}
]);
这是有效的javascript。但是,您不能盲目地在html事件处理程序中执行相同的操作,因为
<button type="button" onclick="some_unique_name({{ data|safe }})" ...>
将扩展到
<button type="button" onclick="some_unique_name([
{
"model": "accounts.profile", // syntax error here..
"pk": 14,
"fields": {
"user": 14,
"email_confirmed": true,
"encrypted_private_key": "Z0FBQUFBQmJLQT09",
"public_key": "LS0tLSS0tLQo=",
"salt": "I8rzovcWsKm4G5Pj3E4DMw=="
}
}
])" ...>
浏览器会将其视为
<button type="button" onclick="some_unique_name([{"
可能意味着JSON不能以[
开头?可能您需要这样更改:Profile.objects.filter(user\u id=self.request.user)[0]
?尝试在JSON.parse(variable\u name)之前使用带有变量的{data | safe}
,不幸的是,您的建议都不起作用。我尝试在HTML文件中创建一个全局变量,如var data={{data | safe}};
和从我的javascript文件访问它,但它给出了相同的错误。我尝试设置带引号和不带引号的变量,还使用backtick。我想将JSON数组转换为javascript对象,这就是我使用JSON.parse
的原因。我尝试使用backtick,但不起作用…不起作用不是问题描述…po我想说的是,json格式的字符串是一个有效的js表达式,因此您可以直接将其插入到代码中,而无需对其进行解析。我的意思是“不起作用”是我已经描述过的相同问题仍然存在。这是Django在将数据序列化为json后给我的信息。您知道如何使用序列化数据吗不需要解析它们吗?是的,按照我的答案将其插入代码中。我已经用生成的代码进行了更新,您可以使用浏览器的查看源代码功能自行检查。别担心,您不会表现得不友好。我也很累。我已经为此工作了一整天。无论如何,我尝试了您的第一个解决方案:var my\u variable={{data | safe}};。
这给了我一个错误,由于某些原因,我现在无法真正复制它……但是它单击了我,我将onclick参数更改为使用单引号而不是双引号,不,它工作得很好。试试它
<button type="button" onclick="some_unique_name([
{
"model": "accounts.profile", // syntax error here..
"pk": 14,
"fields": {
"user": 14,
"email_confirmed": true,
"encrypted_private_key": "Z0FBQUFBQmJLQT09",
"public_key": "LS0tLSS0tLQo=",
"salt": "I8rzovcWsKm4G5Pj3E4DMw=="
}
}
])" ...>
<button type="button" onclick="some_unique_name([{"
<script>
var my_variable = [
{
"model": "accounts.profile", // syntax error here..
"pk": 14,
"fields": {
"user": 14,
"email_confirmed": true,
"encrypted_private_key": "Z0FBQUFBQmJLQT09",
"public_key": "LS0tLSS0tLQo=",
"salt": "I8rzovcWsKm4G5Pj3E4DMw=="
}
}
];
</script>
<button type="button" onclick="some_unique_name(my_variable);">..</button>
<script>
var foo = function () {
some_unique_name([
{
"model": "accounts.profile", // syntax error here..
"pk": 14,
"fields": {
"user": 14,
"email_confirmed": true,
"encrypted_private_key": "Z0FBQUFBQmJLQT09",
"public_key": "LS0tLSS0tLQo=",
"salt": "I8rzovcWsKm4G5Pj3E4DMw=="
}
}
]);
};
</script>
<button type="button" onclick="foo();">..</button>
<script>
var my_variable = {{ data|safe }};
</script>
<button type="button" onclick="some_unique_name(my_variable);">..</button>
<script>
var foo = function () {
some_unique_name({{ data|safe }});
};
</script>
<button type="button" onclick="foo();">..</button>