对控制器的简单AJAX请求 - Symfony3

时间:2017-02-14 08:40:32

标签: ajax symfony

我在Ubuntu16.04上使用Symfony3和PhpStorm.2016.3.2

我之前从未做过AJAX请求,并希望测试从视图调用控制器 - >转发到控制器 - >,然后将回复发送回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');
    }
}

我真的不想让其他人完成这项工作,我只是想知道如何让它发挥作用。所以我很抱歉,如果我的机票很空,但也许它可以帮助其他人,比如我,知道从哪里开始。

1 个答案:

答案 0 :(得分:22)

首先,您需要将路线注册到您的控制器:

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');
}

我认为这个概念应该明确它是如何运作的