2017-06-01 40 views
0

我嘗試爲電子商務創建邊欄過濾器。我已經成功實現了一個infinte滾動分頁,但現在我有一個過濾器的問題。使用Laravel實現的動態Ajax過濾器

<ul class="check-box-list"> 
     <?php $m = 1; ?> 
     @foreach($marchi as $marchio) 
      <li> 
      <input type="checkbox" id="m{{$m}}" class="marchio" name="{{ $marchio->id_produttore }}" data-marchio="{{ $marchio->brand->nome}}" value="{{ $marchio->brand->nome }}" /> 
      <label for="m{{$m}}"> 
      <span class="button"></span> 
       {{ $marchio->id_produttore }}<span class="count">({{ $marchio->total }})</span> 
      </label> 
    </li> 
<?php $m++; ?> 
    @endforeach 
</ul> 

上面有這個動態生成的複選框。

<script type="text/javascript"> 
$('.marchio').on('click', function() { 
     var marchio = $('.marchio:checked').val(); 
     $.ajax(
     { 
      url: '?marchio=' + marchio, 
      type: "get", 
      beforeSend: function() 
      { 
       $('.ajax-load').show(); 
      } 
     }) 
     .done(function(data) 
     { 
      if(data.html == " "){ 
       $('.ajax-load').html("No more records found"); 
       return; 
      } 
      $('.ajax-load').hide(); 
      $("#post-data").append(data.html); 
     }) 
     .fail(function(jqXHR, ajaxOptions, thrownError) 
     { 
       alert('server not responding...'); 
     }); 
}); 

但是,如果我點擊第二個複選框,價值附加到一個AJAX網址保持不變,如果我: 如果我在的這一個點擊,我可以利用這個js觸發正確的值取消第一個剩下的第二個。我需要通過將它附加到URL來傳遞給同一個複選框類的多個值。 如果某些分類可以有多個過濾器,我需要ajax url可以接受不同的?querystryng,例如通過在複選框中點擊','分隔值。有人能幫我嗎?

回答

1

在你的Ajax調用,你可以做這樣的事情:

$('.marchio').on('click', function() { 
    var marchi = {}; 

    $('.marchio:checked').each(function() { 
     marchi[$(this).attr('name')] = $(this).val(); 
    }); 

    $.ajax({ 
     url: '', 
     type: 'get', 

     // This is the important part! 
     data: {marchi: marchi} 
    }) 
}); 

這將發送一個請求,像這樣:

http://example.com/?marchi[name1]=value1&marchi[name2]=value2 

在PHP中,這只是轉化成一個數組,所以你可以簡單地在您的控制器中執行此操作:

foreach (Request::get('marchi') as $id_produttore => $brandNome) { 
    // This marchio has been selected. 
} 

如果您想要傳遞更多值,可以簡單地添加mor e調用$.ajax調用的data屬性。

+0

哇JOE,你太棒了。許多許多許多工作都是如此,我也學到了一個新的重要概念。 – rubenSousa

0

我認爲,如果你創建循環外的形式,所有的複選框傳遞給控制器​​的陣列將其命名爲這樣會更容易(NAME =「名單[]」)

<form action='{{route('someRoute)}}' method='post'> 
    {{csrf_field()}} 
    <ul class="check-box-list"> 
     <?php $m = 1; ?> 
     @foreach($marchi as $marchio) 
      <li> 
      <input type="checkbox" id="m{{$m}}" class="marchio" name="list[]" data-marchio="{{ $marchio->brand->nome}}" value="{{ $marchio->brand->nome }}" /> 
      <label for="m{{$m}}"> 
      <span class="button"></span> 
       {{ $marchio->id_produttore }}<span class="count">({{ $marchio->total }})</span> 
      </label> 
    </li> 
<?php $m++; ?> 
    @endforeach 
</ul> 
</form> 

而且在控制器中,你可以很容易地循環播放結果

public function controllerName(Request $data) 
{ 
    $vars=$data->input('list'); 
    foreach($vars as $var){ 
    // do somnthing 
    } 
} 
+0

這在使用ajax時似乎沒有幫助。這意味着他需要提交表單並重新加載頁面,而不是使用過濾器並使用ajax加載結果。 – Joe

+0

是的,它是正確的。使用表單很容易...我需要通過每個複選框值通過Ajax – rubenSousa