javascript - Twig 和javascript

标签 javascript twig

我正在创建一个页面,根据在组合框中选择的类型显示图表

<div id="chartdiv"></div>

<select name="graphe" id="identifiantDeMonSelect">
<option value="Column2D">Column2D
<option value="Column3D">Column3D
<option value="Pie3D">Pie3D
<option value="Pie2D">Pie2D
</select>
<input type="submit" value="Afficher" onclick="ajax()">


<script type="text/javascript">
function ajax(){
    var xhr

    if (window.XMLHttpRequest) { 
        xhr = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) 
    {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (xhr !=null)  {
    xhr.onreadystatechange = function() { type1(xhr); };
    xhr.open("GET", "{{ path('Ajax')}}", true);
    xhr.send(null);
    } else {

     alert("The XMLHttpRequest not supported");

  }}

function type1(xhr){
            var docXML= xhr.responseText;
            var val_type = getSelectValue('identifiantDeMonSelect');
            var type = val_type+"";
            var str="{{ asset('Charts/Pie2D.swf') }}";
            var chart = new FusionCharts(str, "ChartId", "600", "400", "0", "0");
            chart.setXMLData(docXML);                               
            chart.render("chartdiv");
            }
function getSelectValue(selectId)
{
    var selectElmt = document.getElementById(selectId);
    return selectElmt.options[selectElmt.selectedIndex].value;
}

</script>

现在,当我简单地将 var str="{{ asset('Charts/Pie2D.swf') }}"; 替换为 "{{asset('Charts/'+type+ '.swf') }}" 为了动态更改图表的类型,我收到以下 symfony 错误:"Variable "type"does not exist in ".当我输入 "{{ asset('Charts/"+type+".swf') }}"(我只是将 ' 替换为 ")时,我得到了页面,当我点击提交按钮时什么也没有发生了,在控制台(chrome 的控制台)中我收到此错误“GET http://127.0.0.1:8888/dashboard2/Symfony/web/Charts/"+type+".swf 404(未找到) "。它照原样使用 "+type+"; 显然我需要帮助,我不知道这是串联问题还是与 Twig 和 Assets 功能有关。提前致谢

最佳答案

我想那是不可能的。你不能将 javascript 变量与 twig 混合使用,因为一个是客户端,另一个是服务器。

除了在这里使用 {{asset}} 之外,您还可以创建一个路径来获取您的 Assets 并在操作中使用 Assets 功能。 然后你可以使用这个: https://github.com/FriendsOfSymfony/FOSJsRoutingBundle

或者像这样的廉价解决方法:

route = "{{ path('myassetroute', { 'pie': "PLACEHOLDER" }) }}";
route = route.replace("PLACEHOLDER", type);

关于javascript - Twig 和javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12798091/

相关文章:

javascript - 我可以将图像从 base64 转换为二进制客户端吗?

php - 如何设置语言反馈?

php - 从表中选择行等于选项 symfony2

javascript - dir=auto 属性在应用于 div 标签时不起作用

javascript - 如何在 AngularJS 中循环遍历值表

css - 如何在页面上应用背景?

php - 如何在 Symfony 中使用 1 twig 中的 2 种形式?

twig - 在 symfony 2.3 中呈现除提交之外的所有字段

javascript - 如何在 onclick JS 函数后返回之前的文本?

javascript - 在 div 中包装 bootstrap 完整 slider 使其不起作用