具有 Laravel 实现的动态 Ajax 过滤器

Dynamic Ajax filter with Laravel implementation

我正在尝试为电子商务创建侧边栏过滤器。我已经成功实现了无限滚动分页,但现在我遇到了过滤器问题。

    <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>

上面的复选框是动态生成的。 如果我点击其中一个,我可以使用这个 js 触发正确的值:

<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 url 的值将保持不变,如果我取消选中第一个则剩下第二个。我需要将同一复选框 class 的多个值附加到 url,从而将其传递给 url。 如果某些类别可以有多个过滤器,我需要 ajax url 可以接受不同的查询字符串,例如在我们单击复选框后附加“,”分隔值。有人能帮我吗?

在您的 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.
}

如果您想传递更多的值,只需将更多值添加到 $.ajax 调用的 data 属性 即可。