我有一个带有 AJAX 菜单的 Django 模板(单击不同的菜单项会重新加载页面的一部分)。每次菜单单击都会通过 AJAX 调用 Django View 函数并返回一些要在页面上显示的数据。
我只加载主页中所有菜单项所需的所有 JS(因为我了解到 AJAX 在 <div>
中返回 JS 然后使用 eval() 执行它不是一个好主意)。由于我仅在菜单主页上加载所有 JS,因此在开始时显然不存在其他菜单选项的数据,因为稍后调用相应 View 时(单击菜单选项时)会出现数据
因此,像下面这样的代码会在控制台上出现语法错误,因为 JS 仅在第一次解析。
<script> var data = {{se_data|safe}}; </script>
现在我无法使用从 View 返回的数据,即使在单击菜单选项之后也是如此,因为 JS 解析首先失败了。我尝试仅在选择相应的菜单选项时使用 if
执行代码,但这也不起作用,因为解析器只是解析所有内容。
我一直在尝试不同的方法来解决这个问题,但似乎找不到有效的方法来解决这个问题。另一种方法是让 View 函数首先返回所有数据,但我担心菜单选项和返回的数据可能会随着时间的推移而增长,从而延迟主菜单页面的初始加载。
这是ajax菜单的点击函数:
$(".ent-menu li a").click(function(e) {
e.preventDefault(); // prevent from going to the page mentioned in href
// get the href
var href = $(this).attr("href");
$("#data_container").load(href, function() {
load_data(); //this function uses the data variable defined earlier
});
});
加载菜单主页时我在控制台中看到错误:
Uncaught SyntaxError: Unexpected token ; at line 1110
data = ;
因为数据尚不可用。
正如所讨论的,您应该使用 JSON 将数据从 Python 发送到 JS;使用 JSON.parse()
反序列化数据以在 JS 中使用。
我是一名优秀的程序员,十分优秀!