Laravel поиск возвращает данные повторно - PullRequest
4 голосов
/ 10 мая 2019

У меня есть эта функция для моего поиска, и она возвращает результаты снова и снова

Контроллер

function search(Request $request)
{
    $q = $request->input('searchinput');
    if($q != ''){
        $links = Link::where('status', '1')
           ->where('name','LIKE', "%{$q}%")
           ->orWhere('body','LIKE',"%{$q}%")
           ->paginate(6);
        if ($request->ajax()) {
          $view = (String) view('front.links.more',compact('links'));
          return response()->json(['html'=>$view]);
        }
        return view('front.search.index', compact('links', 'q'))->withQuery($q);
    }else{
        Session::flash('warning', 'You need to fill search field.');
        return redirect()->back();
    }
}

форма

<form class="form-inline" action="{{route('searchin')}}">
  @csrf
  <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" name="searchinput">
</form>

Маршрут

Route::any('search', 'Front\SearchController@search')->name('searchin');

JavaScript

<script defer>
        $(function(){
            var page = 1;
            loadMoreData(page);
            function loadMoreData(page){
                var isotopShowmoreJs = $('.LOADBTN'),ttAddItem = $('.tt_job_listing');

                if (isotopShowmoreJs.length && ttAddItem.length) {
                    isotopShowmoreJs.on('click', function(e) {
                        page++;
                        e.preventDefault();
                        $.ajax({
                            url: '?page=' + page,
                            type: "get",
                            beforeSend: function(){
                                $('.ajax-load').show();
                                $('.spinner-border').show();
                            }
                        }).done(function(data){
                            if(data.html == ""){
                                $('.LOADBTN').hide();
                                $('.spinner-border').hide();
                                $('.tt_item_all_js').css('display', "block");
                            }
                            var $item = $(data.html);
                            ttAddItem.append($item);
                            adjustOffset();
                        }).fail(function(jqXHR, ajaxOptions, thrownError){
                            alert('server not responding...');
                            $('.spinner-border').hide();
                            $('.LOADBTN').hide();
                        });

                        function adjustOffset(){
                            var offsetLastItem = ttAddItem.children().last().children().offset().top - 80;
                            var $body = $('body');
                            var $html = $('html');
                            $($body, $html).animate({scrollTop: offsetLastItem}, 500);
                            $('.spinner-border').hide();
                        };
                        return false;
                    });
                };
            }
        });
    </script>

Скриншот

onne

Видео

https://streamable.com/qwh34

Есть идеи?

обновление до Aditya Thakur комментарий

сеть

two

консоль console.log(page++);

three

консоль console.log(page);

four

Обновление 2

dd($request->all());

array:2 [▼
  "_token" => "eNio8rDaCL2du4I7KAzt5UU3ukrvHHnco3x2orUp",
  "searchinput" => "test"
]

dd($request->ajax()); возврат true

dd($request->input('page')); возврат null

Обновление 3

Dan's response

удаление, если условие в моем контроллере удалило второй запрос ajax и исправило некоторые части.

Sandeep Sudhakaran ответ,

вот мой последний результат после удаления условия if. PS: я пометил дублированные данные.

five

Обновление 4

кнопка загрузки

@if(count($results)>0)
            <div class="row">
                <div class="col-md-12 mt-5 mb-5 text-center">
                    <div class="row">
                        <div class="col-12 text-center">
                            <a href="#" class="btn btn-primary LOADBTN">
                                <div class="spinner-border" style="display: none;" role="status">
                                  <span class="sr-only">{{__('links.loading')}}</span>
                                </div>
                                {{__('links.loadmore')}}
                            </a>
                            <div class="tt_item_all_js" style="display:none;">
                                <button type="button" class="btn btn-secondary btn-3" disabled>{{__('links.nomore')}}</button>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            @endif

1 Ответ

2 голосов
/ 10 мая 2019

Измените ваш Ajax-вызов, как показано ниже.

$.ajax({ 
url: '', 
data:{'page':page}
type: "get", 
beforeSend: function(){ 
    $('.ajax-load').show(); 
    $('.spinner-border').show(); 
}) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...