Symfony2 + AJAX返回源代码

时间:2015-12-30 12:19:50

标签: javascript php ajax symfony

我制作了一个ajax代码,用于将表单数据发送到控制器,但它正在返回源代码。

我正在使用FOSJsRoutingBundle在我的js代码中生成我的路径(我安装并使用它就像doc所说的那样),这是工作并在我的js调用时返回它

  

/xampp/folder/web/app_dev.php/chat /

我像这样用树枝渲染我的表格

{{ form_start(form, {'action': '{{ path("chat_page") }}', 'method': 'POST'}) }}
{{ form_widget(form) }}
<input type="submit" value="Send">
{{ form_end(form) }}

我的js代码看起来像这样

$('form').submit(function(event) {
    event.preventDefault();
    var url = Routing.generate('chat_page');
    console.log(url);
    console.log($('#chat_message').val());

    $.ajax({
        url: url,
        type: $('form').attr('method'),
        data: $('#chat_message').val(),
        success: function(data){
            console.log(data);
        }
    });

    $('#chat_message').val('').focus();
});

我的控制器(可能在ajax完成时未使用)就是这个

/**
 * @param Request $request
 * @Route("/chat/", name="chat_page", options={"expose"=true})
 *
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function indexAction(Request $request)
{
    $chatForm = $this->createForm(ChatType::class);

    $client = $this->get('elephantio_client.socketio_key');
    $elephantIOClient = $client->getElephantIO();

    $elephantIOClient->initialize();

    if ($request->isXmlHttpRequest()) {

        $chatForm->handleRequest($request);

        $chatData = $chatForm->getData();
        dump($chatData);
        $elephantIOClient->emit('chat message', ['msg' => $chatData]);
    }

    $elephantIOClient->close();

    return $this->render('chat/index.html.twig', [
        'form' => $chatForm->createView(),
    ]);
}

我认为这是一个问题,网址(谁似乎很好)谁不打电话给我的控制器,但我不知道是什么。

我用symfony来讨论关于ajax的一些话题,这就像我一直在做的那样。如果您有任何想法可以帮我解决这个问题。

由于

1 个答案:

答案 0 :(得分:1)

它正在呈现您的HTML代码,因为在您的控制器中,您正在使用以下内容呈现HTML代码:

return $this->render('chat/index.html.twig', [
    'form' => $chatForm->createView(),
]);

您需要在if子句中添加一个返回响应,以便在发出ajax请求时返回其他内容:

if ($request->isXmlHttpRequest()) {

    $chatForm->handleRequest($request);

    $chatData = $chatForm->getData();
    dump($chatData);
    $elephantIOClient->emit('chat message', ['msg' => $chatData]);
    return new Response("ok");
}