【问题标题】:Symfony and AjaxSymfony 和 Ajax
【发布时间】:2012-11-28 10:59:30
【问题描述】:

这是我第一次在 Symfony 环境中涉足 Ajax,我可能对代码的组织方式有些困惑。

假设我的 ajax 调用如下所示:

$.getJSON('module/getMeSomeJSONThroughAjax', function(data) {console.log(data); } )

在我的模块/操作文件夹中,actions.class.php 文件有一个方法:

public function getMeSomeJSONThroughAjax()
{
   // do something
   return $jsonEncodedString;
}

请记住,我是 not creating a template for the above method,因此我没有像大多数其他操作那样具有 execute 前缀。只是因为我不认为创建模板对于仅获取 AJAX HTTP 请求的 JSON 数据是一种过度杀伤的情况。

但是,当我的浏览器中发生触发 Ajax 调用的事件时,我的控制台会记录以下内容:

> Failed to load resource: the server responded with a status of 404
> (Not Found)
> http://localhost:8080/customerview_dev.php/flashcard/getMeSomeJSONThroughAjax

我认为这是一个路由问题。简单地摆脱问题的一种可能方法是为上述创建一个模板并将操作重命名为executeGetMeSomeJsonThroughAjax()。但就像我提到的那样,恕我直言,这太过分了,必须有一种更美观、更恰当的方式来完成这项工作。

你们 Symfonians 为 Ajax 调用做了什么?

【问题讨论】:

  • 提示:如果您没有遗留问题,请坚持使用 Symfony2。
  • 认真的吗?由于 ajax jquery 问题,您希望我迁移到 Symfony 2...ajax 在所有版本的 symfony 中都可以正常工作,并且有很多网站在生产中
  • Symfony 2 显然更好 [by def],如果您需要从头开始工作,那么使用过时的框架是没有意义的。如果你需要维护遗留代码,当然你必须坚持使用旧版本,正如我明确指出的那样。
  • 我标记了你的评论,因为它与我的问题无关,这是一个关于如何在 Symfony 1.4 上下文中处理 Ajax 的问题,我感谢你关心向我推荐一个更好的框架,但是只是没有解决这个问题,请阅读stackoverflow规则,谢谢
  • 致投反对票的人:你能评论一下你为什么对我的问题投反对票吗?

标签: jquery ajax symfony1 xmlhttprequest symfony-1.4


【解决方案1】:

即使您没有模板,您仍然需要执行前缀。 您可以根据需要将模板设置为无,或者:

return $this->renderText($jsonEncodeString);

应该也可以。

【讨论】:

    【解决方案2】:

    这个想法是:

    控制器:

    namespace something;
    
    use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
    use Symfony\Component\HttpFoundation\Response;
    
    class AjaxController extends Controller {
        public function doSometingInAjaxAction()
        {
            $request        = $this->getRequest();
            $id             = $request->get('id');    
            $em             = $this->getDoctrine()->getManager();
            $object         = $em->getRepository('Bundle:Bundle')->find($id);
            $objectJson     = json_encode($object);        
            return new Response($modelosJson);        
        } }
    

    观点:

    <script>
         $(document).ready(function(){
    
         //...
    
         $.ajax({
            url: '{{ path('admin_ajax_ajax') }}', 
            data: id,
            success: function (response) 
            {    
             //someting
             }                
         });
         });
    
    
    </script>
    

    路由器

    admin_ajax_ajx:
        path:  /a/supercool/path//
        defaults: { _controller: Bundle:Ajax:doSometingInAjax }
    

    这是我的基地和工作

    【讨论】:

      猜你喜欢
      • 2018-04-27
      • 2012-08-16
      • 2021-04-06
      • 2011-11-25
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多