2017-09-30 2 views
0

私はこれをここ数週間解決しようとしています。私はちょうどそれの周りに私の頭を得ることはできません。私のウェブページLaravel AJAX - 複数の選択されたフィルタを覚えている

私は全部で4つのフィルタがあります:1、検索、年によってフィルタ、国によって打ち上げサイトやフィルタによるフィルタを。これらのフィルタは、単独で完全に動作します。彼らはすぐに自分のデータベースをフィルタリングし、必要な結果を返すことができます。

問題は、一つのフィルタを適用し、別のフィルタを適用することにした場合、それは最初のフィルタをリセットしているという事実にあります。私が作っているAJAX呼び出しは、私が最初に適用したフィルタが何であったかを覚えておく能力がありません。私の研究から、ユーザーが選んだフィルターを何らかの形で保存し、ボタンなどでそれらを適用する必要があることがわかった。私はそれがこれを実装する最も簡単な方法だと思います。

基本的には、私たちが達成したいことは、ユーザーがリセットを取得して最初の1せずに、複数のフィルタを選択することができるようにすることです。

これは私が現在、私のAJAX呼び出しのために使用していますコードです:それはそれを行うための最善の方法ではなかったとはないので、私は私の答えを更新し

$(document).ready(function() { 
 
    $('#filter-type').select2(); 
 
    $('#filter-year').select2(); 
 
    $('#filter-pad').select2(); 
 
    $('#search').on('keyup', function() { 
 
    $value = $(this).val(); 
 
    delay(function() { 
 
     if ('#search'.length > 3) { 
 
     $.ajax({ 
 
      type: 'get', 
 
      url: '{{$operatorname->spadoc_cd}}', 
 
      data: { 
 
      'search': $value 
 
      }, 
 
      success: function(data) { 
 
      $('#data-holder').html(data); 
 
      } 
 
     }); 
 
     } 
 
    }, 300); 
 
    }); 
 
    $("#filter-pad").change(function() { 
 
    $value = $(this).val(); 
 
    $.ajax({ 
 
     type: "get", 
 
     url: "{{$operatorname->spadoc_cd}}", 
 
     data: { 
 
     'search': $value, 
 
     type: 'site' 
 
     }, 
 
     success: function(data) { 
 
     $('#data-holder').html(data); 
 
     } 
 
    }); 
 
    }); 
 
    $("#filter-type").change(function() { 
 
    $value = $(this).val(); 
 
    $.ajax({ 
 
     type: "get", 
 
     url: "{{$operatorname->spadoc_cd}}", 
 
     data: { 
 
     'search': $value, 
 
     type: 'object_type' 
 
     }, 
 
     success: function(data) { 
 
     $('#data-holder').html(data); 
 
     } 
 
    }); 
 
    }); 
 
    $("#filter-year").change(function() { 
 
    $value = $(this).val(); 
 
    $.ajax({ 
 
     type: "get", 
 
     url: "{{$operatorname->spadoc_cd}}", 
 
     data: { 
 
     'search': $value, 
 
     type: 'launch_year' 
 
     }, 
 
     success: function(data) { 
 
     $('#data-holder').html(data); 
 
     } 
 
    }); 
 
    }); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

if ($request->ajax()) 
    { 
     $output=""; 
     $operatorsatellite = DB::table('satellites') 
      ->where(function($q) use ($request) { 
       if(empty($request->type) && empty($request->rocket_type)) { 
        $q->orWhere('satname','LIKE','%'.$request->search.'%') 
         ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%') 
         ->orWhere('country','LIKE','%'.$request->search.'%') 
         ->orWhere('object_id','LIKE','%'.$request->search.'%'); 
       } else { 
        if(!empty($request->type)) { 
         $q->orWhere($request->type,'LIKE','%'.$request->search.'%'); 
        } 
        if(!empty($request->site)) { 
         $q->orWhere('site','LIKE','%'.$request->site.'%'); 
        } 
        if(!empty($request->object_type)) { 
         $q->orWhere('object_type','LIKE','%'.$request->object_type.'%'); 
        } 
        if(!empty($request->launch_year)) { 
         $q->orWhere('launch','LIKE','%'.$request->launch_year.'%'); 
        } 
       } 
      }) 
      ->where('country', $spadoc_cd)->Paginate(700); 
     if ($operatorsatellite) 
     { 
      foreach ($operatorsatellite as $key => $operatorsatellites) { 
      $output .='<div class="table-row" id="launchsatdisplay">'. 
        '<div class="satname">'.'<a href=/satellite/'."$operatorsatellites->norad_cat_id".'>'.$operatorsatellites->satname.'</a>'.'</div>'. 
        '<div>'.'<div class="satnumbers">'.'<span>'.$operatorsatellites->norad_cat_id.'</span>'.'<span>'.$operatorsatellites->object_id.'</span>'.'</div>'.'</div>'. 
        '<div>'.$operatorsatellites->object_type.'</div>'. 
        '</div>'; 
      } 
     } 
     return $output; 
    } 
    else { 
     $operatorsatellite = DB::table('satellites')->Paginate(50); 
     return view('pages/operator-filter', compact('operators', 'operatorsatellite', 'searchsite', 'searchyear', 'searchtype')); 
    } 
+0

になりますが、セッション中に、あなたのフィルタを保存しない理由として、データを送信する、ことを行うにはポイントがありませんか? –

+0

@skileton - 私は実際にそれを考えなかった。それは良いアイデアのようだ!私は最初のステップは、それを実装する方法を見つけることだと思います。これを行う方法について何か提案していただけますか? –

+0

@skileton URLの各クエリの間に疑問符はありません。あなたはそれをどうやって修正しようとしますか?携帯から –

答えて

2

まったく正しい。 まず、パラメータとしてフィルタあなたのAJAX呼び出しのアドオンで、あなただけのGETデータであなたのフィルタを送信することができます(とあなたの状況では、その後のセッションを使用し、より賢明になります)何かを(それらが選択または入力した場合、あなたの入力に依存します)この

data: { 
    'filter-1': $('.myInput1').val(), // take value from filter 1 and send them as get params 
    'filter-2': $('.myInput2').val(), // take value from filter 2 and send them as get params 
    // ........... 
} 

のようなので、あなたのURLは、すべての選択変更時にデータを更新したい場合は、他のフィルタからの値をとり、このmydomain.me/myurl?search=someValue?filter-1=somevalue1&filter-2=somevalue2

ようにする必要がありますので、それらはたとえば

ため、失われることはありません
$("#filter-type").change(function() { 
$value = $(this).val(); 
$value2 = $('otherFilter2').val(); 
$value3 = $('otherFilter3').val(); 
$.ajax({ 
    type: "get", 
    url: "{{$operatorname->spadoc_cd}}", 
    data: { 
    'search': $value, 
    'filter2' $value2, 
    'filter3' $value3, 
    // other code .... 

このURLからフィルタを取得してクエリで使用できます。

その値はPHPコードで

if(!empty($request->filter-1)) { 
    $q->orWhere('someData','LIKE','%'.$request->filter1.'%'); 
} 

が存在するかどうかを確認し、他人に同じことを行います。もちろん、あなたがセッションを使用することができますが、AJAXリクエストを送信するときGETパラメータをより簡単かつより良い方法

+0

申し訳ありませんが、イムタイピングは、私は答えを更新します –

+0

助けるために全体のコードを記述することはできません、それは私が 'フィルタ-1 'それとは、あなたの質問にある代わる何すべて –

+0

では正しくありませんでしたか?私はJavascriptの部分を動作させることができましたが、PHPの部分を動作させることはできません。ありがとう! –

関連する問題