我想知道如何在不重新加載頁面的情況下在Symfony2中執行異步操作。我沒有發現關於「書」和「食譜」的任何內容。 (只有我發現事情是2句約hinclude.js?)Symfony2和AJAX
的即時通訊思想:發送形式,而不重新加載頁面(保存到數據庫),重新加載頁面的部分,等
我想知道如何在不重新加載頁面的情況下在Symfony2中執行異步操作。我沒有發現關於「書」和「食譜」的任何內容。 (只有我發現事情是2句約hinclude.js?)Symfony2和AJAX
的即時通訊思想:發送形式,而不重新加載頁面(保存到數據庫),重新加載頁面的部分,等
粗略模板用於控制器功能。
它包括一個檢查是否ajax並只返回JsonResponse。
public function ajaxAction(Request $request)
{
if (! $request->isXmlHttpRequest()) {
throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();
}
// do whatever
$rtn = array('foo' => 'bar');
return new \Symfony\Component\HttpFoundation\JsonResponse($rtn);
}
標準ajax代碼放在視圖中;
<div id="my-foo">bob</div>
<script type="text/javascript">
var jqxhr = $.ajax({
url: '{{ path('route_to_controller_function') }}', // path should be in your routes.php
type: 'post',
data: {param1: 'foo'}, // if required
})
.done(function(data) {
// do whatever you want
// for example write foo to div
$('#my-foo').html(data.foo);
})
.fail(function() {
alert("error");
});
</script>
是的,但我怎麼能從JS調用控制器動作? – 2014-10-03 15:37:01
例如,您可以使用Ajax並從url加載數據(映射到特定的課程行爲)。對於你的問題的其他部分,symfony非常「靜態」。文檔假設前端沒有太多的JS,除非是急需的時候,例如表單字段原型。如果你需要做很多事情,我建議你嘗試尋找一個JS前端框架(例如AngularJS),因爲例如只有jQuery,事情很快就會變得很難看。 – tomazahlin 2014-10-03 15:39:03
bench-o已經爲你更新了我的答案,但是如果你想要做很多Ajax,特別是對於表單,@tomazahlin提出了一個很好且有效的觀點。 – Rooneyl 2014-10-03 15:45:49
您可以使用[FOSJsRoutingBundle](https://github.com/FriendsOfSymfony/FOSJsRoutingBundle)。它將允許您使用Javascript生成路線。 – ferdynator 2014-10-03 16:17:17