2016-07-28 11 views
0

Ich versuche ein Suchformular zu erstellen, das nach einem Datensatz in einer Datenbanktabelle sucht, während der Benutzer in das Suchfeld eintippt.
Laravel Ajax Suche



-Controller

public function search() { 
    // get the search term 
    $term = Input::get('term'); 

    // search the members table 
    $members = DB::table('members') 
       ->where(concat("members.member_first_name,' ',members.member_last_name"), 'LIKE', "$term") 
       ->orwhere(concat("members.member_last_name,' ',members.member_first_name"), 'LIKE', "$term") 
       ->orwhere(concat("members.member_name_affix,' ',members.member_last_name,' ',members.member_first_name"), 'LIKE', "$term") 
       ->orwhere(concat("members.member_first_name,' ',members.member_name_affix,' ',members.member_last_name"), 'LIKE', "$term") 
       ->orwhere('members.member_first_name', 'LIKE', "$term") 
       ->orWhere('members.member_last_name', 'LIKE', "$term") 
       ->orWhere('members.member_business_address', 'LIKE', "$term") 
       ->get(); 

    // return the results in JSON format 
    return response()->json($members); 
} 

Strecke

Route::get('search', '[email protected]'); 

Ansicht

<!-- THE SEARCH FORM --> 
<form method="GET" id="search-form"> 
    <input type="search" id="term" name="term" onkeyup="ajaxSearch()" placeholder="Search the members table..." autofocus> 
</form> 

<!-- THE AJAX FUNCTION --> 
<script> 
    function ajaxSearch() { 
     $.ajax({ 
      url: 'search', 
      type: 'GET', 
      data: {term: $('#term').val()}, 
      dataType: 'JSON', 
      success: function(response) { 
       console.log(data); 
      } 
     }); 
    } 
</script> 

<!-- THE RESULTS TABLE --> 
<div class="clear"></div> 
<div id="resultTableWrapper"> 
    <table id="resultTable"> 
     <thead> 
      <tr> 
       <th>Name</th> 
       <th>Address</th> 
       <th>Business Address</th> 
       <th>Join Date</th> 
      </tr> 
     </thead> 
     <tbody></tbody> 
    </table> 
</div><!-- /#resultTableWrapper --> 
<div class="clear"></div> 
<p id="search-info">Please type your search phrase in the field above.</p> 

<!-- USE THE JSON RESPONSE TO FILL THE RESULTS TABLE --> 
@if (isset($_GET['term'])) 
    @foreach ($members as $member) 
     <tr> 
      <td> 
       <strong> 
        {!! $member->member_name_affix.' '.$member->member_last_name.' '.$member->member_first_name.' '.$member->member_title !!} 
       </strong><br><br> 
       <div class="unhighlight"> 
        {!! $member->member_business_position !!}<br><br> 
        {!! $member->member_business_name !!} 
       </div> 
      </td> 
      <td class='unhighlight'> 
       @if ($member->member_private_address) 
        <span> 
         {!! $member->member_private_address !!} <br> 
         {!! $member->member_private_zip_code. ' ' .$member->member_private_location !!} 
        </span><br> 
        <div class='clear'></div> 
       @endif 
      </td> 
      ... and so on ... 
     </tr> 
    @endforeach 
@endif 




Die Fehlermeldung, die ich immer bin, wenn ich den Brief der Eingabe beginnen ‚a‘ in das Suchfeld:
GET http://localhost.local/search?term=a 500 (Internal Server Error)



Ich bin sehr neu Laravel und ich würde für jeden sehr dankbar Art von Hilfe!

UPDATE

Dank Amieiro ich, dass der Fehler bei der Eingabe zu sein scheint, um herauszufinden, verwaltet :: get() Methode:
enter image description here

+1

Interner Serverfehler bedeutet normalerweise, dass Sie etwas in Ihrem Code vermasselt haben. Überprüfen Sie Ihre Laravel Storage/Logs-Ordner oder Apache-Logs für Hinweise, was es ist. –

+0

Danke für die Hilfe. Ich finde jedoch nur .gitignore-Dateien im Ordner logs. – Schwesi

+1

Sie sollten Körper von Ajax-Antwort überprüfen. Es hätte mehr Informationen, was falsch ist. Sie können es in Entwickler-Tools überprüfen. Sie können sich das [Beispiel] (http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art034) für Chrome ansehen. –

Antwort

1

Ändern Sie Ihre Abfrage wie folgt, in where oder orWhere zuerst param shuould sein Spalte Name auch hinzufügen % um $term und entfernen Sie unnötige wo Bedingungen.

public function search(Request $request) { 
$term = $request->input('term'); 
$members = DB::table('members as m') 
      ->where('m.member_first_name', 'LIKE', "%$term%") 
      ->orWhere('m.member_last_name', 'LIKE', "%$term%") 
      ->orWhere('m.member_business_address', 'LIKE', "%$term%") 
      ->get(); 
return response()->json($members); 
} 
+0

Vielen Dank für deine Hilfe! Ich habe getan, dass es nichts geändert hat immer noch die gleiche Fehlermeldung erhalten. – Schwesi

3

Sie können den Fehler überprüfen, der versucht, den JSON zu sehen. In Google Chrome können Sie sehen, wie das Element überprüft wird, indem Sie die Seite neu laden und dann auf der Registerkarte "Netzwerk" den XHR-Filter. Sie können es im nächsten Bild sehen

enter image description here

+0

Vielen Dank, dass Sie darauf hingewiesen haben! Ich habe meine Antwort entsprechend aktualisiert! – Schwesi

2

Wie pro Ihre Update müssen Sie Input in Ihrem Controller umfassen einfach

use App\Http\Controllers\Input; 

am Anfang der Datei nach dem Namespace. Anstatt Input Fassade zu verwenden, können Sie Request Fassade für bessere Codierungsstandards verwenden

+0

Ich bekomme 'Class Input' nicht gefunden, wenn ich das tue. – Schwesi

+1

Ich habe jetzt den Input-Teil zur Arbeit, danke! 'öffentliche Funktionssuche (Anfrage $ Anfrage) { $ term = $ Anfrage-> Eingabe ('Term');' – Schwesi

+1

Gern geschehen. Sie können upvoten, wenn es Ihnen wirklich geholfen hat. Ich habe meine Antwort aktualisiert – devmyb