在 javascript 中通过 django 模板检索 json 数据时出错,在参数列表后给出 Uncaught SyntaxError: missing )

Posted

技术标签:

【中文标题】在 javascript 中通过 django 模板检索 json 数据时出错,在参数列表后给出 Uncaught SyntaxError: missing )【英文标题】:Error on retrieving json data through django templates in javascript gives Uncaught SyntaxError: missing ) after argument list 【发布时间】:2021-05-15 14:21:31 【问题描述】:

我正在通过 django restframework 中的 apiview 将 json 响应数据渲染到 html 模板 list.html,我想在其中以 javascript 代码检索此数据。 然而,每次它在参数列表错误后给出“缺失”,即使它们实际上并不存在于接收到的数据中(如在 chrome 的检查工具中所见)

发现错误

var list =JSON.parse("data|safe")

views.py 中渲染数据的代码 apiview 是:

@api_view(['GET','POST'])
def memeList(request):
    if request.method=='GET':
        meme = Meme.objects.all().order_by('-meme_id')[:100]
        serializer = MemeSerializer(meme, many=True)
    elif request.method=='POST':
        serializer=MemeSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()

    serJS = JsonResponse(serializer.data,safe=False)
    return render(request,'list.html','data':serJS.content)

任何解决方案,因为我已经尝试了互联网上所有可用的解决方案,但问题仍未解决。

【问题讨论】:

【参考方案1】:

问题在于您的views.py文件中sn-p的最后一行:

return render(request, 'list.html', 'data': serJS.content)

这里,serJS.content 返回一个表示内容的字节串。要将其解析为 JSON,您需要将其转换为字符串,在 html 正文中呈现,然后将其正确解析为 JSON。改用这个:

return render(request, 'list.html', 'data': serJS.content.decode())

【讨论】:

【参考方案2】:

不能这样做:

var list = JSON.parse("data|safe")

data|safe 将呈现无法(可靠)解析为 JSON 的 Python 对象。

您可能想要的是使用json_script 模板过滤器。按照文档中的步骤在 JavaScript 中获取 JSON 格式的数据。

【讨论】:

它在不使用安全过滤器时给出“意外令牌&”错误。问题出在我传递数据的视图中,我必须首先传递给解码函数,如接受的答案中所述.. data 是一个 bytes 对象,不能用 JSON 表示。你仍然不应该使用JSON.parse("data|safe")。这是一个等待发生的 XSS 漏洞。使用json_script

以上是关于在 javascript 中通过 django 模板检索 json 数据时出错,在参数列表后给出 Uncaught SyntaxError: missing )的主要内容,如果未能解决你的问题,请参考以下文章

在Django中通过反向存在检查过滤查询集

如何在 django 中通过电子邮件发送链接?

在 django 中通过管理站点添加对象时出错

如何在 django 模板中通过模型名获取模型

如何在 django 中通过 AJAX 请求传递数据?

如何在:Django 中通过 URL 传递带空格的变量