Maison > Questions et réponses > le corps du texte
J'essaie de mettre en place une barre de recherche en direct. La recherche en direct fonctionne mais elle imprime le résultat deux fois, ce qui est ennuyeux. Pourriez-vous s'il vous plaît jeter un oeil à où se situe le problème ? Merci.
Voici mon code de fonction de recherche.
public function search(Request $request) { if ($request->ajax()) { $output = ""; $projects = Project::where('title', 'LIKE', '%' . $request->search . '%') ->where('module_code',$request->module_code) ->get(); $count = count($projects); // $projects = array_unique($projects); if ($projects) { foreach ($projects as $project) { $output .= '<tr>' . '<td>' . $project->team_number . '</td>' . // '<td>' . $count . '</td>' . '<td>' . $project->lab . '</td>' . '<td>' . '<a href="/projects/' . $project->id . '" style="display:block;"><b>' . $project->title . '</b></a>' . '</td>' . '<td>' . $project-> latest_state. '</td>' . '<td>' . $project->team_member_1 . '</td>' . '<td>' . $project->latest_team_member_1_state . '</td>' . '<td>' . $project->team_member_1 . '</td>' . '<td>' . $project->latest_team_member_1_state . '</td>' . '<td>' . $project->team_member_1 . '</td>' . '<td>' . $project->latest_team_member_1_state . '</td>' . '<td>' . $project->ta . '</td>' . '<td>' . $project->created_at . '</td>' . '<td>' . '<button class="btn-sm btn-info pull-left" onclick="location.href = \'/projects/' . $project->id . '\'">Project Details</button> ' . '</td>' . '</tr>'; } return Response($output); } } }
Voici le script pour la recherche en direct dans php Blade :
<script type="text/javascript"> const getQueryParams = (params, url)=>{ let href = url; let regexp = new RegExp('[?&]' + params + '=([^&#]*)', 'i'); let qString = regexp.exec(href); return qString ? qString[1] : null; } $('#search').on('keyup',function(){ $value = $(this).val(); //alert($value); $qString = getQueryParams('module', window.location.href); $queryString = $.ajax({ type : 'get', url : '{{URL::to('search')}}', data : {'search':$value, 'module_code', $qString}, success:function (data) { //console.log(data); //alert(data); $('tbody').html(data); } }); }) </script>
C'est le code de la barre de recherche en php Blade
<div class="col-sm-5"> <input type="text" class="form-control" id="search" name="search" placeholder="Search..."/> </div>
Avant de chercher :
Après avoir recherché :
P粉5510842952024-02-27 00:41:54
Merde, je viens de découvrir la cause de ce problème. C'est un peu idiot. Le code original est ici : https://onecompiler.com/posts/3xy39rm78/php-blade-for-staff, l'erreur existe toujours. Le problème est que j'ai ajouté une balise supplémentaire inutile. La sortie est placée à des endroits étiquetés, tout comme le script :
$('#search').on('keyup',function(){ $value = $(this).val(); $qString = getQueryParams('module', window.location.href); $queryString = $.ajax({ type : 'get', url : '{{URL::to('search')}}', data : {'search':$value, 'module_code': $qString}, // data : {'search':$value}, success:function (data) { //console.log(data); // alert(data); $('tbody').html(data); } }); })
Au dernier point du code, il indique au HTML d'imprimer le résultat au niveau de la balise (je ne sais pas si c'est correct). En supprimant la balise tbody ci-jointe, le problème a été résolu.