刚刚开始使用Symfony2,并且在成为ZF1长期开发人员后非常喜欢它。
今晚开始在网站上添加一些Ajax功能,对以下内容感到有点困惑。
在我的ajax电话中,例如:
$.ajax({
url: '/app_dev.php/ajax/urlgetter',
data: "url="+urlinput,
dataType: 'html',
timeout: 5000,
success: function(data, status){
// DO Stuff here
}
});
我必须将/app_dev.php添加到url才能在dev环境中运行。有没有更好的方法来做到这一点?这是否意味着当我将项目更改为生产环境时,我需要搜索并替换/app_dev.php的所有实例?希望我完全错过了一些简单的事情。
答案 0 :(得分:4)
我最终使用了jsrouting-bundle
安装完成后,我可以执行以下操作:
$.ajax({
url: Routing.generate('urlgetter'),
data: "url="+urlinput,
dataType: 'html',
timeout: 5000,
success: function(data, status){
// DO Stuff here
}
});
其中urlgetter是在routing.yml中定义的路由,如:
urlgetter:
pattern: /ajax/urlgetter
defaults: { _controller: MyAjaxBundle:SomeController:urlgetter }
options:
expose: true
注意必须为使用jsrouting-bundle
的路由设置expose:true选项答案 1 :(得分:3)
我想这个问题已经有点老了,但我遇到了同样的问题。
它不是任何“最佳实践”解决方案,但这就是我所做的。
在twig
中,您可以完美地使用此{{ path('yourRouteName') }}
内容。所以在我的twig
文件中,我有一个类似的结构:
...
<a href="{{ path('myRoute') }}"> //results in e.g http://localhost/app_dev.php/myRoute
<div id="clickMe">Click</div>
</a>
现在,如果有人点击了div,我会在.js file
中执行以下操作:
$('#clickMe').on('click', function(event) {
event.preventDefault(); //prevents the default a href behaviour
var url = $(this).closest('a').attr('href');
$.ajax({
url: url,
method: 'POST',
success: function(data) {
console.log('GENIUS!');
}
});
});
我知道这对于你想要触发Ajax请求的每种情况都不是解决方案,但我只是把它留在这里,也许有人认为它有用:)
答案 2 :(得分:1)
由于这个jQuery ajax函数放在twig端,url指向你的应用程序,你可以插入路由路径
$.ajax({
url: '{{ path("your_ajax_routing") }}',
data: "url="+urlinput,
dataType: 'html',
timeout: 5000,
success: function(data, status){
// DO Stuff here
}
});