2016-02-10 87 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');