我有一个带有AJAX菜单的Django模板(在其中单击不同的菜单项会重新加载页面的一部分)。每次单击菜单都会通过AJAX调用Django视图功能,并返回一些要显示在页面上的数据。
我仅加载主页中所有菜单项所需的所有JS(因为我了解到AJAX在a中返回JS <div>然后使用eval()来执行不是一个好主意)。由于我仅在菜单的主页上加载所有JS,因此显然开始时其他菜单选项的数据不存在,因为稍后将在调用相应视图时(单击菜单选项时)提供数据。
<div>
因此,下面的代码在控制台上会产生语法错误,因为JS仅是第一次解析。
<script> var data = {{se_data|safe}}; </script>
现在,即使单击菜单选项后,也无法使用从视图返回的数据,因为JS解析首先失败了。我尝试if仅在选择了相应的菜单选项时才执行代码,但是由于解析器仅解析所有内容,因此这也不起作用。
if
我一直在尝试不同的方法来解决此问题,但似乎找不到有效的方法来解决此问题。另一种选择是让视图函数仅首先返回所有数据,但是我担心菜单选项和返回的数据可能会随着时间的推移而增长,从而延迟了主菜单页面的初始加载。
这是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中使用的数据。
JSON.parse()