2016-02-10 23 views
1

我在Symfony2中編寫了一些基本的crud應用程序,我想在某個頁面上實現某種類型的搜索功能。Searchfuntion在Symfony2中使用ajax調用

這個想法是,我想通過在輸入字段中輸入一些內容來啓動一個搜索查詢,該字段將會觸發一個ajaxcall(我想不出任何更好的東西)。該ajaxcall的響應必須是一種彈出列表,其中包含可單擊項目的彈出列表,這些項目在單擊項目時將放置在初始頁面的另一個字段中。

我有兩個問題: 有沒有比ajax更好的方法,我該如何解決'彈出列表'的問題。

二:我可以交AjaxCalls的在Symfony2中使用這種代碼:

var data = 'test'; 
     $.ajax({ 
      url: "{{ path('test_oost') }}", 
      data: { data: data }, 
      method: "post", 
      success: function(data) { 
       //some things here 
      } 

但我認爲這是一個有點奇怪使用後,我想使用get ..顯然,這是行不通的因爲我不能找回我的控制器中的數據..

編輯:我忘了後我控制我在哪裏處理Ajax調用,這裏是代碼:

public function testGetAction(Request $request) 
{ 
    $data = $request->request->get('data'); 
    $em = $this->getDoctrine()->getManager(); 

    $entity = $em->getRepository('EuropsimProductBundle:SimProfile')->find($data); 
    return new Response($entity); } 

這是窩國王罰款與方法:「後」,但失敗時,我嘗試使用「得到」。

我也讀過關於typeahead,這是非常接近我的意思,事情是我想要一個自定義的小彈出或什麼,因爲ajax應該返回一個具有多個屬性的對象數組必須顯示並且可以選擇多個項目。您可以將其視爲兩個步驟,首先啓動搜索查詢,將您帶入某種彈出窗口或您可以選擇所需行以便在頁面上進一步使用。

在此先感謝! Hicy

+2

你所描述的被稱爲'autocomplete'或'typeahead'並且有可用於此衆多插件。至於GET VS POST,將與你的後端代碼並不怎麼'$ .ajax'工作要做。它只是做了什麼你告訴它做 – charlietfl

+0

我更新我的職務與後端代碼 – Hicy

回答

1

你必須使用方法$request->query

對於GET方法:

$data = $request->query->get('data'); 

對於POST方法:

$data = $request->request->get('data'); 
1

這個真沒有太大的Symfony2的相關問題......但

此代碼是JavaScript的,如果你想使用GET只是改變方法GET

var data = 'test'; 
     $.ajax({ 
      url: "{{ path('test_oost') }}", 
      data: { data: data }, 
      method: "get", 
      success: function(data) { 
       //some things here 
      } 

然後在Symfony中創建路徑test_oost,並在控制器上做任何你想要的響應發送「數據」。

然後在success方法相應地處理這些數據並創建所需的視圖。

編輯:基於您的新的編輯,你有一個錯誤訪問您的data參數,你應該使用query代替request

$data = $request->query->get('data');