网址中的Symfony2 Ajax app_dev.php

时间:2013-02-09 16:16:25

标签: ajax symfony

刚刚开始使用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的所有实例?希望我完全错过了一些简单的事情。

3 个答案:

答案 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
    }
});