【问题标题】:Ajax and Jquery in SymfonySymfony 中的 Ajax 和 Jquery
【发布时间】:2011-11-25 03:02:30
【问题描述】:

我是 Symfony(第 2 版)的初学者,我有一个使用简单的基本 PHP 实现的项目,现在我正在重做我的页面以处理 Symfony 框架,并到达我的 jquery ajax 函数,当然,事情会不一样 我以前是这样的:

$("#div").click(function(){
  $.post("targetFile.php",{/*parameters*/,function(data){ });
});

问:如何让它在 Symfony 上运行? 放什么而不是 targetFile.php?最有可能的路线。 以及在控制器和路由器端做什么? 我在谷歌和这里看了看,但没有得到任何明确的答案。 问候。

【问题讨论】:

  • 你有什么问题?
  • 如何让 Jquery Ajax 函数在 Symfony 上工作?

标签: javascript php jquery symfony


【解决方案1】:

你真的只需要用你的自定义路由替换 targetFile.php。

所以如果你的 routing.yml 中有这个:

# app/config/routing.yml
hello:
    pattern:      /ajax/target
    defaults:     { _controller: AcmeHelloBundle:Site:index }

你可以使用这个javascript:

$("#div").click(function(){
  $.post("/ajax/target",{/*parameters*/,function(data){ });
});

在Symfony2端,会调用AcmeHelloBundle的SiteController的方法indexAction。

【讨论】:

  • 看看 Firebug 告诉我的内容:未找到 在此服务器上未找到请求的 URL /目标。而我的路由器是:target: pattern: /target defaults: { _controller: WWBundle:Default:target},我的 Javascript 是 $("#div").click(function(){ $.post("/target",{/*parameters*/,function(data){ }); });,控制器是 public function targetAction(){ return $this->render('WWBundle:Default:target.html.php'); } Damien 先生怎么了?
  • 是的,但我仍然收到此消息:“NetworkError: 404 Not Found - localhost/target”。
  • 添加解决了这个问题:$isAjax = $this->get('Request')->isXMLHttpRequest(); 真的我不明白 Symfony 想要如何工作:),无论如何,谢谢,感谢您的支持。
【解决方案2】:

如果你在 routing.yml 里面设置这个:

_admin_ajax:
    resource: "@SomethingAdminBundle/Controller/AjaxController.php"
    type:     annotation
    prefix:   /admin/ajax  

... 在控制器内部,它将处理 ajax 调用:

/**
 * @Route("/ajaxhandler", name="_admin_ajax_handler")
 */
public function handlerAction() {
    
    $isAjax = $this->get('Request')->isXMLHttpRequest();
    if ($isAjax) {
        //...
        return new Response('This is ajax response');
    }
    return new Response('This is not ajax!', 400);
}

...然后在例如 TWIG 模板中,您应该这样称呼它:

$("#div").click(function(){
  $.post("{{ url('_admin_items_add') }}",{/*parameters*/,function(data){ });
});

...您的操作的真实路线将使用模板引擎生成。

【讨论】:

  • 好吧,我试试,但是如果模板是一个php文件呢?放置什么作为网址。
  • 添加解决了问题:$isAjax = $this->get('Request')->isXMLHttpRequest(); 真的我不懂 Symfony 逻辑 :) 无论如何,谢谢你,谢谢你的支持兄弟。
  • 而且清除缓存可能会影响,我不能说这是解决方案,因为我每次更改某些内容时总是清除缓存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 2018-04-27
  • 2012-08-16
  • 2011-10-26
  • 2021-06-09
  • 1970-01-01
  • 2014-07-26
相关资源
最近更新 更多