Twig和javascript

Twig和javascript,javascript,twig,Javascript,Twig,我正在创建一个页面,根据组合框中选择的类型显示图表 <div id="chartdiv"></div> <select name="graphe" id="identifiantDeMonSelect"> <option value="Column2D">Column2D <option value="Column3D">Column3D <option value="Pie3D">Pie3D <option val

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

<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>

专栏2D
Column3D
Pie3D
Pie2D
函数ajax(){
var xhr
如果(window.XMLHttpRequest){
xhr=newXMLHttpRequest();
}
else if(window.ActiveXObject)
{
xhr=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
如果(xhr!=null){
xhr.onreadystatechange=function(){type1(xhr);};
open(“GET”,“{{path('Ajax')}}”,true);
xhr.send(空);
}否则{
警报(“不支持XMLHttpRequest”);
}}
函数类型1(xhr){
var docXML=xhr.responseText;
var val_type=getSelectValue('identiantdemonselect');
变量类型=变量类型+“”;
var str=“{asset('Charts/Pie2D.swf')}”;
var图表=新的FusionCharts(str,“ChartId”、“600”、“400”、“0”、“0”);
chart.setXMLData(docXML);
chart.render(“chartdiv”);
}
函数getSelectValue(selectId)
{
var selectElmt=document.getElementById(selectId);
返回selectElmt.options[selectElmt.selectedIndex].value;
}
现在,当我简单地替换
var str=“{{asset('Charts/Pie2D.swf')}”时
“{asset('Charts/'+type+'.swf')}}”
为了动态更改图表的类型,我获得以下符号错误:
中不存在“{{asset('Charts/“+type+”.swf')}}”
(我刚刚替换为“)时,我得到了页面,当我点击提交按钮时,什么都没有发生,在控制台(chrome的控制台)内,我得到了这个错误“
get”http://127.0.0.1:8888/dashboard2/Symfony/web/Charts/“+type+”.swf 404(未找到)
”。它按原样接受它+键入+”

显然我需要帮助,我不知道这是一个连接问题,还是与细枝和资产函数有关。提前谢谢

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

在这里,您不必使用{asset}},而可以创建一个路由来获取资产并在操作中使用资产功能。 然后,您可以使用:

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

route = "{{ path('myassetroute', { 'pie': "PLACEHOLDER" }) }}";
route = route.replace("PLACEHOLDER", type);
非常感谢:)好吧,我想称之为“聪明的做事方式”,而不是“廉价的变通方法”。可能是