首页 > 解决方案 > symfony中的Ajax调用过滤表

问题描述

我是 Symfony 的新手。

我有 2 个实体 Position 和 Candidat 与关系,因为我们可以有多个候选人。

现在,我有一个按职位填充的下拉列表,并在一个包含候选人列表的表格下方。

当我使用下拉菜单选择职位时,我想要筛选候选人列表。

在代码下方:

控制器

/**
* @Route(name="filter",path="/filter")
* @param Request $request
*/
public function test2Action(Request $request)
{   
$em = $this->getDoctrine()->getManager();

$positions = $em->getRepository('AppBundle:Position')->findAll();
$candidats = $em->getRepository('AppBundle:Candidat')->findAll();

if($request->request->get('myselect')){

$val = $request->request->get('myselect');
$candidats = $em->getRepository('AppBundle:Candidat')->find($val);
return $this->render('postionsearch.html.twig',  
array( 'candidats'  => $candidats , 'positions' => $positions ) );
}

return $this->render('postionsearch.html.twig',  
array( 'candidats'  => $candidats , 'positions' => $positions ) );
}

树枝

<body>

<div class="container">
<div class="row">
<div class="col-xs-12">
<select  name="position" id="selectpos">
<option ></option>
{% for position in positions %}
<option value="{{ position.id }}">{{ position.titre }} 
</option>
{% endfor %}
</select>   
</div>
</div>
</div>

</body>
<div id="ajax-results">Results : </div>

{% if candidats  is defined %}
<table id="dataTable">
<tbody>
{% for candidat in candidats %}
<tr>
<td>{{candidat.id}}</td>
<td>{{candidat.nom}}</td>
</tr>
{% endfor %}
</tbody>
</table>

{% endif  %}

JS

<link rel="stylesheet" href="{{ 
asset('assets/bootstrap/css/bootstrap.min.css') }}" />
<script src="{{ asset('assets/jquery/jquery.min.js') }}"></script>
<script src="{{ asset('assets/bootstrap/js/bootstrap.min.js') }}"></script>    
<script>
$(document).ready(function(){
console.log("jQuery is ready");
$("#selectpos").change(function(){
var value= $( "#selectpos option:selected" ).val();
$.ajax({
url:'{{ (path('filter')) }}',
type: "POST",
dataType: "json",
data: {
"myselect": value
},
async: true,
success: function (data)
{
console.log(data)
$('#ajax-results').html(data.output);
},
error: function (err)
{
console.log(err.statusText);
}
});

return false;
})
});
</script>

标签: phpmysqlajaxsymfonydoctrine

解决方案


您需要将过滤器参数传递给您的操作:

/**
* @Route(name="filter",path="/filter/{positionId}")
* @param Request $request
*/

或者通过 get 来完成:

$request->get('positionId')

然后将其用作存储库中的标准:

$positions = $em->getRepository('AppBundle:Position')->findBy([
    'positionId' => $positionId
]);

阿贾克斯请求:

$.ajax({
    url:'path_to_your_controller',
    data: {
        "myselect": value
    })

推荐阅读