0

在我的应用程序中,我进行了一个 ajax 调用,使用 js 呈现此模板:

<div id="ajax_reply">
<div id="hidden_data" style="display:none;"></div>
<script type="text/javascript">
var data = [];
data.push(['Col1', 'Col2', 'Col3', 'Col4']);
{% for entry in mydata %}
  var dCell = [];
  dCell.push({{ entry.Col1 }});
  dCell.push({{ entry.Col2 }});
  dCell.push({{ entry.Col3 }});
  dCell.push({{ entry.Col4 }});
  data.push(dCell);
{% endfor %}
document.getElementById('hidden_data').innerHTML = JSON.stringify(data);
</script>
</div>

这不起作用,如果我在控制台中手动运行生成的 js,它确实会插入到 div 中,但否则,javascript 永远不会执行。我在 SO 上进行了搜索,但找不到关于这个确切主题的问题。hidden_​​data 在范围内,有什么建议吗?

编辑:在 onload 包装后在控制台中看到的代码(我必须进行一些编辑,但在控制台中手动运行它)

<div id="ajax_reply">
<div id="hidden_data" style="display:none;"></div>
<script type="text/javascript">
window.onload = function() {
    var data = [];
    data.push(['Col1', 'Col2', 'Col3', 'Col4']);

      var dCell = [];
      dCell.push('1233');
      dCell.push('123312');
      dCell.push('1233');
      dCell.push('1482.61');


      data.push(relation);

      var dCell = [];
      dCell.push('1231');
      dCell.push('2112.0');
      dCell.push('1231');
      dCell.push('123123.00');


      data.push(relation);

  document.getElementById('hidden_data').innerHTML = JSON.stringify(relationsData);
};
</script>
</div>
4

2 回答 2

1

如果entry.Col1包含字符串“我的文本”,则生成的模板将为您提供如下行:

dCell.push(my text);

而且,我想,你需要

dCell.push('my text');
于 2012-06-26T21:19:56.440 回答
0

确保这是在加载 DOM 后执行的。

尝试像这样包装你的脚本:

window.onload=function(){
    //script here
}

您可以在jsfiddle上看到这应该可以工作。


更新:

Django 插入数据的方式似乎是个问题,因为它使用硬编码的样本数据。尝试使用escapejs模板过滤器来处理任何潜在的 javascript 转义问题。我之前不得不用换行符和'&'符号来调试类似的问题。

dCell.push("{{ entry.Col1|escapejs }}");
于 2012-06-26T21:23:21.027 回答