2017-08-01 10 views
1

私はデータベース内のデータを検索するためのウェブページのライブ検索入力をしようとしています。これまでのところ私はこれが出ている:Laravel jQuery AJAXライブ検索

コントローラー:

public function launchsitefilter($site_code, Request $request) { 
    $launchsites = DB::table('launchsites')->where('site_code', $site_code)->get(); 
    if(! $launchsites){ 
     return abort(404); 
    } 
    $launchsitesatellite = DB::table('satellites')->where('site', $site_code)->get(); 
    if ($request->ajax()) 
    { 
     $output=""; 
     $launchsitesatellite = DB::table('satellites')->where('satname','LIKE','%'.$request->search.'%') 
                ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%'); 
     if ($launchsitesatellite) 
     { 
      foreach ($launchsitesatellite as $key => $launchsitesatellites) { 
      $output ='<tr>'. 
        '<td>'. $launchsitesatellites->satname .'</td>'. 
        '<td>'.$launchsitesatellites->norad_cat_id.'</td>'. 
        '<td>'.$launchsitesatellites->object_type.'</td>'. 
        '</tr>'; 
      } 
     } 
    } 
    return view('pages/launchsite-filter', compact('launchsites', 'launchsitesatellite'));   
} 

スクリプト:

$('#search').on('keyup', function() { 
$value=$(this).val(); 
    $.ajax({ 
     type : 'get', 
     url : '{{$launchsitename->site_code}}', 
     data : {'search':$value}, 
     success:function(data) { 
      console.log(data);  
     } 
    }); 
}); 

ブレード:

私は入力に何かを入力すると、私は、コンソールにこのエラーが出ます
<input type="text" class="form-control" id="search" name="search"></input> 

GET http://space-observe.dev/launch-site/JSC?search=search term 500 (Internal Server Error)

私はJavascriptを推測しています、私のコントローラにエラーが発生しながら取り組んでいます。ライブ検索を実行して結果を表示するには、何をする必要がありますか。あなたは次のようにコードを書き換えたい場合

+0

return文の前に 'dd($ launchsites);'を追加します。結果を教えてください –

+0

エラーログを見ることはできますか? –

+0

@SimonSchnell私はデータベースから必要なデータを持つ配列を取得します。 '$ launchsitesatellite'も同じです。 –

答えて

1

、それが動作するはずです:関数は右のサイトcontaintsがサイトを立ち上げる場合は、チェックした後、2つの部分に分割されていることを

public function launchsitefilter($site_code, Request $request) { 

    $launchsites = DB::table('launchsites')->where('site_code', $site_code)->get(); 
    if(! $launchsites){ 
     return abort(404); 
    } 

    if ($request->ajax()) 
    { 
     $output=""; 
     // This is the ->get() I'm referring to in the comments. 
     $launchsitesatellite = DB::table('satellites')->where('satname','LIKE','%'.$request->search.'%') 
                ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%')->get(); 
     if ($launchsitesatellite) 
     { 
      foreach ($launchsitesatellite as $key => $launchsitesatellites) { 
      $output .='<tr>'. 
        '<td>'. $launchsitesatellites->satname .'</td>'. 
        '<td>'.$launchsitesatellites->norad_cat_id.'</td>'. 
        '<td>'.$launchsitesatellites->object_type.'</td>'. 
        '</tr>'; 
      } 
     } 

     return $output; 
    } 
    else { 
     $launchsitesatellite = DB::table('satellites')->where('site', $site_code)->get(); 

     return view('pages/launchsite-filter', compact('launchsites', 'launchsitesatellite'));   
    } 

} 

注意を。

両方の部分が独自の応答を返した場合、ajax部分はHTML応答を返し、通常部分はビューを返します。

また、->get()には、あなたのコードにあった問題を修正する必要があることに注意してください。

最後に、$outputにすべての行を追加したいときは、ドット(.)を忘れてしまい、最後の結果しか表示されません。

+0

完璧に動作します!一つのこと - 私はデータベースを返す前に 'site-code'でフィルタリングしていたので、ページにはその特定のコードの行しか表示されませんでした。 '$ site sites = DB :: table( 'satellites') - > where( 'site'、$ site_code) - > get();'これを実現するためにこれを使いました。とにかく、フィルタリングされたデータベースのみを検索でき、データベース全体を検索することはできませんか? –

+0

また、1つのこと - データベースをフィルタリングする方法がありますか?たとえば、オブジェクト(PayloadまたはBody)のタイプを定義する列(object_type)があります。とにかくそれをフィルタリングするためのチェックボックスを作るのですか?ありがとう! –

+0

' - > where( 'site'、$ site_code)'でのフィルタリングに関しては、うまくいきませんでした。それはまだデータベース全体を検索します。 –

関連する問題