我编写了一个ajax代码来将表单数据发送到 Controller ,但它返回源代码。
我正在使用 FOSJsRoutingBundle 在我的 js 代码中生成我的路线(我按照文档所述安装并使用了它),这正在工作并在调用我的 js 时返回它
/xampp/folder/web/app_dev.php/chat/
我像这样在 Twig 中渲染我的表单
{{ 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();
});
我的 Controller (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 的问题(看起来不错),它没有调用我的 Controller ,但我不知道是什么。
我读了一些关于 ajax 和 symfony 的主题,它一直像我所做的那样。如果您有任何想法可以帮助我解决这个问题。
谢谢
最佳答案
它正在渲染您的 HTML 代码,因为在您的 Controller 中您正在使用以下内容渲染 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");
}
关于javascript - Symfony2 + AJAX返回源码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34529445/