2017-02-14 99 views
3

我在Ubuntu16.04简单的Ajax请求控制器 - Symfony3

使用Symfony3与PhpStorm.2016.3.2

我从来没有做过一个AJAX请求和想测试一个呼叫从一个视图 - 控制器>的controller->将答案发送回JSON视图。

所以我阅读了文档,但他们都非常具体。所以我的愿望是只能够在视图(index.html.twig)中编写一个简单的AJAX请求,用于测试它,拨打控制器(MainController.php)并在视图中返回JSON中的答案。

这是我的看法:

{% extends 'app/layout.html.twig' %} 

{% block content %} 

{% endblock %} 

我的控制器:

class MainController extends Controller 
{ 
    public function indexAction() 
    { 
     return $this->render('app/main/index.html.twig'); 
    } 
} 

我真的不想做被他人所做的工作,我只是想获得怎样的提示使其工作。所以我很抱歉,如果我的票很空,但也许它可以帮助其他人,比如我,知道从哪里开始。

回答

10

起初,你需要将路径登记到控制器:

app_bundle_route: 
    path:  /ajax_request 
    defaults: { _controller: AppBundle:Main:index } 

然后在你的主视图加载jQuery的,或许你已经做到了。您需要在您的模板,以行动呼吁,一些触发初学者AJAX请求:

{% extends 'app/layout.html.twig' %} 

{% block content %} 
    <button class="ajax">click me!</button> 
    <div id="ajax-results">here comes the result</div> 
    <script> 
     $(document).on('click', 'button.ajax', function(){ 
      that = $(this); 
      $.ajax({ 
       url:'{{ (path('app_bundle_route')) }}', 
       type: "POST", 
       dataType: "json", 
       data: { 
        "some_var_name": "some_var_value" 
       }, 
       async: true, 
       success: function (data) 
       { 
        console.log(data) 
        $('div#ajax-results').html(data.output); 

       } 
      }); 
      return false; 

     }); 
    </script> 
{% endblock %} 

而且至少你的控制器是非常简单的:

public function indexAction(Request $request) 
{ 
    if($request->request->get('some_var_name')){ 
     //make something curious, get some unbelieveable data 
     $arrData = ['output' => 'here the result which will appear in div']; 
     return new JsonResponse($arrData); 
    } 

    return $this->render('app/main/index.html.twig'); 
} 

我认为这个概念应该明确如何可以工作

+0

非常感谢您的回答,我会立即将它应用到我的工作中,并让您知道该如何工作(在一个小时左右) Alos我不应该使用'if($ request- > isXmlHttpRequest())用于AJAX请求?我以为是这样... –

+0

你可以,它取决于你如何匹配请求。我展示了众多选择中的一种。 – Rawburner

+0

好的谢谢:)我会马上尝试,让你知道。 –