ajax - 为什么 if 条件不过滤结果?
问题描述
我想根据用户选择的某些标准创建高级搜索过滤人员数据。此应用程序使用 laravel 5 开发。我正在使用 ajax 函数和 if 语句查询数据以过滤条件。结果会出现,但它不会过滤 if 语句中的任何条件。
过滤条件的控制器是这样的:
public function kakitangan(Request $request)
{
$query = DB::table('itemregistrations')
->select('itemregistrations.ItemRegistrationID','itemregistrations.name', 'itemregistrations.Nobadan');
if ($request->section != ""){
$query->where('SectionID', $request->section);
}
$newitem = $query->get();
return response::json($newitem);
}
我也试过这个:
$query = DB::table('itemregistrations')
->select('itemregistrations.ItemRegistrationID','itemregistrations.name', 'itemregistrations.Nobadan');
if(request('section')) {
$query->where('SectionID', request('section'));
}
$newitem = $query->get();
return response::json($newitem);
但结果是一样的……itemregistrations 中的所有数据都出现在输出页面中。虽然我选择了另一个部分标准。
这是用于选择的视图页面代码:
<div class="row">
<div class="col-lg-2">
{{ Form::label('Seksyen', 'Seksyen') }}
</div>
<div class="col-lg-2">
{{ Form::select('section', $sections, '', ['class' => 'form-control select2', 'placeholder' => '--pilih--']) }}
</div>
</div>
</div>
选择 id 来自控制器功能:
$sections = Section::pluck('sectionname', 'SectionID');
//sent to html view
return view('carian.index', compact('sections'));
调用ajax函数获取查询的按钮:
<button class="btn btn-primary btn-md" id="cari">Cari</button>
结果代码出现:
<script type="text/javascript">
$( "#cari" ).click(function() {
var seksyen = $("#section").val();
$.ajax({
url: '{{ url('kakitangan') }}',
data: {'section': seksyen},
dataType: 'json',
success: function (data) {
console.log(data);
$('#datatable tr').not(':first').not(':last').remove();
var html = '';
for(var i = 0; i < data.length; i++){
html += '<tr>'+
'<td>' + data[i].name + '</td>' +
'</tr>';
}
$('#datatable tr').first().after(html);
},
error: function (data) {
}
});
});
</script>
应该是当用户选择一个部分时,只出现该部分的工作人员。但是现在选择任何部分时都会出现所有五线谱。
我只是尝试在控制器中使用它来测试节值是否正确传递给控制器:
$try=$request->input('section');
return response::json($try);
它导致空数组..没有传递值?是不是没有正确传递部分值?如何纠正这个问题?
解决方案
您在执行 GET 请求时将该部分作为 post 参数传递。使用 jQuery,您可以使用以下命令将其作为查询字符串发送:
var seksyen = $("#section").val();
$.ajax({
url: '{{ url('kakitangan') }}?' + $.param({'section': seksyen}),
dataType: 'json',
...
has
在您的控制器中,您还可以使用请求上的方法显式检查请求是否包含查询字符串
if(request()->has('section')) {
$query->where('SectionID', request('section'));
}
编辑:
使用 laravel 集体表单助手,您可以使用以下内容指定字段 id(注意第四个参数 id)
{{ Form::select('section', $sections, '', ['id' => 'section', 'class' => 'form-control select2', 'placeholder' => '--pilih--']) }}
推荐阅读
- c# - 安装的 nuget 包缺少文件
- python - 如何找到字符串中的所有Occurance
- java - Docker-compose 与 MySql 的容器连接不起作用
- javascript - 当我单击关闭表单的按钮时,为什么我的 HTML 网页会刷新
- visual-studio-2017 - VS2017 - 尝试将 nuget 包保存到 Xamarin 文件夹中 - 为什么?
- neo4j - 与 Cypher 中的聚合函数 min() 匹配最短距离
- google-sheets - 具有多个和空白(忽略)条件的 Google 表格查询功能
- loops - 带有循环的 Anylogic 状态图可将 3 个套件设置为空闲或计划
- javascript - 在数组中,将每个元素与每个元素进行比较并显示差异
- amazon-web-services - nobody@mycraftmail.com - 有人通过此电子邮件地址来过吗?