2014-10-03 54 views
1

我想知道如何在不重新加載頁面的情況下在Symfony2中執行異步操作。我沒有發現關於「書」和「食譜」的任何內容。 (只有我發現事情是2句約hinclude.js?)Symfony2和AJAX

即時通訊思想:發送形式,而不重新加載頁面(保存到數據庫),重新加載頁面的部分,等

+0

您可以使用[FOSJsRoutingBundle](https://github.com/FriendsOfSymfony/FOSJsRoutingBundle)。它將允許您使用Javascript生成路線。 – ferdynator 2014-10-03 16:17:17

回答

1

粗略模板用於控制器功能。
它包括一個檢查是否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> 
+0

是的,但我怎麼能從JS調用控制器動作? – 2014-10-03 15:37:01

+1

例如,您可以使用Ajax並從url加載數據(映射到特定的課程行爲)。對於你的問題的其他部分,symfony非常「靜態」。文檔假設前端沒有太多的JS,除非是急需的時候,例如表單字段原型。如果你需要做很多事情,我建議你嘗試尋找一個JS前端框架(例如AngularJS),因爲例如只有jQuery,事情很快就會變得很難看。 – tomazahlin 2014-10-03 15:39:03

+0

bench-o已經爲你更新了我的答案,但是如果你想要做很多Ajax,特別是對於表單,@tomazahlin提出了一個很好且有效的觀點。 – Rooneyl 2014-10-03 15:45:49