如何在js文件中获取路由路径

时间:2015-04-27 12:59:37

标签: php jquery mongodb symfony

我有一个new.html.twig,我在此页面上使用了少量ajax调用下拉变化事件。

所以我创建了一个名为new.js的septate js文件,并将我的所有JavaScript代码保存在此文件中,而不是将其写在同一个视图文件中。

但是在这个js文件中,我无法访问调用ajax请求的路由路径。关于改变事件。

===========New.twig.html=====================
    include(new.js);
    <select><name='a' onchange="setLabel('123')"></select>
    ============new.js.=============        
    function setLabel(voucherTypeID) {           
    queryString = "voucherTypeID=" + voucherTypeID;
    $('#loading-image').show();
    $.ajax({
    type: "POST",
    url: "{{path('vouchergeneration_getLedgers')}}", //THIS PATH How TO GET
    data: queryString,
    cache: "false",
    dataType: "html",
    success: function (data){
    });

所以在这里我无法访问URL路径,而之前可以在twig文件中访问它。请指导我如何解决这个问题。我不想使用任何Bundle来完成这项简单的工作..提前感谢..

3 个答案:

答案 0 :(得分:2)

这个简单的作品FOSJsRoutingBundle

有一个非常简单的包

启用此捆绑包后,您只需执行

Routing.generate('my_route_to_expose', { id: 10 }); // will result in
/foo/10/bar

Routing.generate('my_route_to_expose', { id: 10, foo: "bar" }); //
will result in /foo/10/bar?foo=bar

$.get(Routing.generate('my_route_to_expose', { id: 10, foo: "bar" }));
// will call /foo/10/bar?foo=bar

Routing.generate('my_route_to_expose_with_defaults'); // will result
in /blog/1

Routing.generate('my_route_to_expose_with_defaults', { id: 2 }); //
will result in /blog/2

Routing.generate('my_route_to_expose_with_defaults', { foo: "bar" });
// will result in /blog/1?foo=bar

Routing.generate('my_route_to_expose_with_defaults', { id: 2, foo:
"bar" }); // will result in /blog/2?foo=bar

修改 当然你可以不用捆绑(我不认为这是一个好主意)。在这种情况下,我会建议在控制器的动作中设置你的路线,并设置在twig模板中使用它来设置js变量。类似的东西:

<强>控制器:

public function indexAction()
{
    return array('yourRoute' => $router->generate('yourRoutName'));
}

您的模板:

<script type="text/javascript">
    var yourRoute = '{{yourRoute}}';
</script>

你的js:

(...)
url: yourRoute,
(...)

答案 1 :(得分:1)

如果您想嵌入一个URL并使用JS获取它,您可以执行以下操作:

// HTML/Twig
<html data-my-route="{{ path('vouchergeneration_getLedgers') }}">
    ...
</html>

然后在你的JS中:

$.ajax({
    type: "POST",
    url: $('html').attr('data-my-route'),
    data: queryString,
    cache: "false",
    dataType: "html",
    success: function (data){
});

它避免使用全局变量,您可以根据需要使用尽可能多的数据属性。

答案 2 :(得分:0)

如果使用提取,则可以使用data.url获取帖子的网址:

  fetch('/check', {
      method: 'POST', // or 'PUT'
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(qrinfo)
    })
    .then((data) => {
      let url = data.url;
      if(url.includes('/leave.html')) {
        window.location.replace('/leave.html');

      }
      else {
        console.log("Page not changed.");
      }
      console.log('Success:', data);
    })
    .catch((error) => {
      console.error('Error:', error);
    });

您可以使用.includes()来检查URL中是否包含路径名,因此更改端口不会成为问题。