我有一个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来完成这项简单的工作..提前感谢..
答案 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中是否包含路径名,因此更改端口不会成为问题。