2017-08-01 97 views
1

我一直在嘗試爲網頁進行實時搜索輸入以搜索數據庫中的數據。到目前爲止,我想出了這一點:Laravel jQuery AJAX Live搜索

控制器:

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

在返回語句之前添加'dd($ launchsites);''。並告訴結果 –

+0

你能看錯誤日誌嗎? –

+0

@SimonSchnell我從數據庫中獲取需要的數據。 '$ launchsitesatellite'也一樣。 –

回答

1

如果您想重寫如下代碼,它應該工作:

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'));   
    } 

} 

注意,功能分爲兩個部分,如果該網站containts發射場檢查之後。

兩部分都返回自己的響應,ajax部分返回HTML響應,正常部分返回視圖。

另請注意->get()我補充說應該解決你的代碼有問題。

最後,當您想將行添加到$output時,您忘記了一個點(.),它只會顯示最後一個結果。

+0

完美的作品!有一件事 - 在我返回數據庫之前,我會通過「site-code」過濾它,所以頁面只會顯示具有特定代碼的行。我用它來實現它:'$ launchsitesatellite = DB :: table('satellites') - > where('site',$ site_code) - > get();'。無論如何,我只能搜索過濾的數據庫,而不是我的整個數據庫? –

+0

還有一件事 - 有沒有辦法來過濾數據庫 - 例如我有一個列(object_type),它定義了對象的類型(Payload或Body)。無論如何做一個複選框來過濾它?謝謝! –

+0

關於用' - > where('site',$ site_code)過濾',它不起作用。它仍然搜索整個數據庫。 –