php - 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>
解决方案
您需要将过滤器参数传递给您的操作:
/**
* @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
})
推荐阅读
- javascript - 将 css 添加到 js 警报消息中
- python - Apache - 如果文件不存在,运行脚本来创建它,然后提供它
- pandas - 用 geopandas 为特定国家着色
- cmake - 在 windows 10 中构建 ParaView-Superbuild
- ibm-cloud - 已删除的实例 IBM-CLOUD
- elasticsearch - 序列化来自 Nest 客户端 ElasticSearch 6.4 的查询
- php - 将单词从 php 传递给 python,用它来执行几个命令并打印一些东西
- java - 无法在 docker 中构建 selenium 映像
- vb.net - 比较 vb.net 中的两个 For Each 列表
- c - 用 C 解决这个问题时的时间限制