在 laravel 中使用 ajax 从控制器刀片文件中传递搜索数据时遇到问题
Posted
技术标签:
【中文标题】在 laravel 中使用 ajax 从控制器刀片文件中传递搜索数据时遇到问题【英文标题】:Having problems to pass searched data from controller blade file using ajax in laravel 【发布时间】:2020-05-19 09:07:00 【问题描述】:这是我在 Admin Controller 中的控制器方法,该方法接收搜索输入,但我在将输出数据传递到视图文件时遇到问题
public function action(Request $request)
if($request->ajax())
$students=Student::where('name','LIKE','%'.$request->search."%")->paginate(5);
$data = $students->count();
if($data > 0)
$output=$students;
else
$output=$students;
return view('search' compact('output'));
这是视图文件中的 ajax (search.blade.php
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript">
// $(document).on('keyup', '#search', function()
$('#search').on('keyup',function()
$value=$(this).val();
$.ajax(
type : 'get',
url : 'route('search.action')',
data:'search':$value,
success:function(data)
$('tbody').html(data);
);
)
</script>
<script type="text/javascript">
$.ajaxSetup( headers: 'csrftoken' : ' csrf_token() ' );
</script>
这里是ajax路由
Route::get('/search/action', 'AdminController@action')->name('search.action');
【问题讨论】:
您是否遇到任何错误?如果是,请更新。 否,但没有返回数据view()
不返回 HTML - 你需要 render()
它。 SO上有很多关于这个的问题。更常见且可能更好的方法是让您的控制器返回 data - 例如 JSON - 并让您的前端渲染它,例如遍历结果数组并创建 HTML 以插入 DOM。
这能回答你的问题吗? How can I return a view from an AJAX call in Laravel 5?
【参考方案1】:
更新下面的源代码。
AdminController.php
public function action(Request $request)
if ($request->ajax())
// Convert to lowercase after trim the searched text
$search_text = strtolower(trim($request->search));
$students = Student::where('name','LIKE','%'.$search_text."%")->paginate(5);
$data = $students->count();
$output = array();
if ($data > 0)
$output = $students->toArray();
// Return JSON response
return response()->json($output);
search.blade.php
<input type="text" id="search">
<div id="studentlist">
<table>
<thead>
<tr>
<th>Id</th>
<th>Name</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript">
$('#search').on('keyup',function()
$value=$(this).val();
$.ajax(
type : 'get',
url : 'route('search.action')',
data:'search':$value,
success:function(response)
var studentListHtml = "";
if (response)
if (response.data && response.data.length > 0)
$.each(response.data , function( index, value )
studentListHtml += "<tr><td>" + value.id + "</td>" + "<td>" + value.name + "</td></tr>";
);
$("#studentlist table tbody").empty().html(studentListHtml);
else
$("#studentlist table tbody").empty().html("<tr><td colspan='2'>No students found</td></tr>");
);
)
</script>
<script type="text/javascript">
$.ajaxSetup( headers: 'csrftoken' : ' csrf_token() ' );
</script>
【讨论】:
请帮我一个忙...如何显示这些值以上是关于在 laravel 中使用 ajax 从控制器刀片文件中传递搜索数据时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
如何从刀片模板中的 Javascript 文件重定向 Laravel 路由