2013-02-09 64 views
4

刚刚开始使用Symfony2,并且在成为ZF1开发人员后很喜欢它。url中的Symfony2 Ajax app_dev.php

开始为今晚的网站添加一些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,以使其在开发环境中工作。有没有更好的方式来做到这一点?这是否意味着当我将项目更改为生产环境时,我需要搜索并替换/app_dev.php的所有实例?希望我完全错过了一些简单的东西。

+0

你应该设置你的开发计算机,而不必发生'app_dev.php'到你的开发环境,而是使用一个虚拟主机(或等价物)。 – cheesemacfly 2013-02-09 16:48:20

回答

1

因为这个jQuery的AJAX功能被放置在树枝侧和URL指向您的应用程序,你可以插入路由路径

$.ajax({ 
    url: '{{ path("your_ajax_routing") }}', 
    data: "url="+urlinput, 
    dataType: 'html', 
    timeout: 5000, 
    success: function(data, status){ 
     // DO Stuff here 
    } 
}); 
+0

这没有奏效。路径将完全按照{{path(“urlgetter”)}}传递。是否有需要配置这些功能才能开箱即用?我最终使用了FOSJsRoutingBundle。 – someuser 2013-02-10 06:46:24

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请求,但我只是离开这个在这里,也许有人认为它是有用的:)

+0

[链接] http://stackoverflow.com/questions/15448563/how-to-render-twig-path-call-as-jquery-ajax-url这似乎也是一个不错的选择 – SirDerpington 2013-04-17 11:39:39

4

我结束了使用jsrouting束

一旦安装我可以简单地做到以下几点:

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