【问题标题】:Symfony2 + AJAX return source codeSymfony2 + AJAX 返回源代码
【发布时间】:2015-12-30 12:19:49
【问题描述】:

我编写了一个 ajax 代码来将表单数据发送到控制器,但它返回的是源代码。

我正在使用 FOSJsRoutingBundle 在我的 js 代码中生成我的路由(我像文档所说的那样安装和使用它),这是有效的,当它在我的 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(),
    ]);
}

我认为这是 url 的问题(谁看起来不错)谁不调用我的控制器但我不知道是什么。

我用 symfony 阅读了一些关于 ajax 的主题,它一直都像我做的那样。如果您有任何想法可以帮助我解决此问题。

谢谢

【问题讨论】:

  • 您的代码到底有什么不适合的?您期望完成什么,却发生了什么?
  • 代码正在运行。我希望得到我放在表单上的数据,但我得到的是我页面的源代码。我的控制台日志返回源代码,就像我的data: $('#chat_message').val(),返回页面源代码

标签: javascript php ajax symfony


【解决方案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");
}

【讨论】:

  • 哦,是的,我明白为什么它会返回源代码。感谢您的解释和帮助
猜你喜欢
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 2014-07-24
  • 2015-09-23
  • 2015-09-10
  • 1970-01-01
相关资源
最近更新 更多