【问题标题】:How to display results when the input is empty with Ajax in Laravel?在 Laravel 中使用 Ajax 输入为空时如何显示结果?
【发布时间】:2016-11-29 20:31:15
【问题描述】:

我有一个 AJAX 搜索输入字段,用于搜索 retours 表中的多个字段。

在第一页加载时,当搜索输入为空时,它会显示status = 3 的所有retours。

然后你输入搜索并运行并返回此代码:

$searchquery = $request->get('searchqueryfinished');

$data = Retour::where('status', 3)
    ->where(function($q) use($searchquery) {
        $q->where('rma', 'like', '%'.$searchquery.'%')
            ->orWhere('naam', 'like', '%'.$searchquery.'%')
            ->orWhere('framenummer', 'like', '%'.$searchquery.'%');
    })->get();

如果您清除搜索输入字段整个表为空,我希望它显示status = 3 的所有retours。就像你第一次加载页面时一样..

我尝试检查是否 $searchquery isset 但无法正常工作。

ajax:

{!! Form::open(['class' => 'form-horinzontal']) !!}
{!! Form::text('search', null, ['id' => 'search-input', 'required', 'class'=>'form-control', 'placeholder'=>'Retourbon zoeken, begin met typen...', 'onkeyup' => 'search_data(this.value, "result")']) !!}
{!! Form::close() !!}

<script>
function search_data(search_value) {
    console.log(search_value);
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': '{{ csrf_token() }}'
        }
    });
    $.ajax({
        url: '{{action("RetoursController@searchretour", ["d" => 'd'])}}' ,
        data: {searchqueryfinished:search_value},
        method: 'GET'
    }).done(function(response) {
        console.log(response);
        $('.ajax-table-retours').html(response);
    });
}
</script>

【问题讨论】:

    标签: javascript php jquery ajax laravel


    【解决方案1】:

    您可以像这样构建查询:

    $searchquery = $request->get('searchqueryfinished');
    
    $data = Retour::where('status', 3);
    if(!empty($searchquery)) {
        $data = $data->where(function($q) use($searchquery) {
                  $q->where('rma', 'like', '%'.$searchquery.'%')
                    ->orWhere('naam', 'like', '%'.$searchquery.'%')
                    ->orWhere('framenummer', 'like', '%'.$searchquery.'%');
                });
    }
    $data = $data->get();
    

    【讨论】:

      【解决方案2】:

      如果没有收到searchqueryfinished,您只需指定默认值,因此$searchquery 将采用3 作为值:

      $searchquery = $request->get('searchqueryfinished',3);
      

      如果您收到searchqueryfinished,并且收到的值为空字符串"",您可以使用empty() 方法检查并返回3,如果为真:

      $searchquery = $request->get('searchqueryfinished');
      $searchquery = empty($searchquery)?3:$searchquery;
      

      我需要它返回 ALL Retour::where('status', 3)->get()->all();而不是过滤东西。

      所以你只需要提出一个条件:

      if(empty($searchquery)){
          $data = Retour::where('status', 3)->get();
      }else{
          $data = Retour::where('status', 3)
              ->where(function($q) use($searchquery) {
                  $q->where('rma', 'like', '%'.$searchquery.'%')
                      ->orWhere('naam', 'like', '%'.$searchquery.'%')
                      ->orWhere('framenummer', 'like', '%'.$searchquery.'%');
              })->get();
      }
      

      试试这个js:

      function search_data(search_value) {
          if( search_value != ""){
            var option = {searchqueryfinished:search_value};
          }else{
            var option = {};
          }
      
          $.ajaxSetup({
              headers: {
                  'X-CSRF-TOKEN': '{{ csrf_token() }}'
              }
          });
          $.ajax({
              url:'{{action("RetoursController@searchretour", ["d" => 'd'])}}' ,
              data: option,
              method: 'GET'
          }).done(function(response){
              console.log(response);
              $('.ajax-table-retours').html(response);
          });
      }
      

      希望这会有所帮助。

      【讨论】:

      • 这并不能解决问题.. 没有任何改变
      • 默认值为 3 的搜索查询不会返回我需要的记录。我需要它返回 ALL Retour::where('status', 3)->get()->all();而不是过滤东西。如果我不清楚,我很抱歉。
      • 是的,这正是我所需要的。但我已经试过了。它不起作用..我不知道为什么。当我 dd($data);在条件之后,当搜索不为空时返回正确的数组,但当 $searchresult 为空时不返回任何内容..
      • 似乎没有进入条件的if(empty($searchquery))
      • 所以你没有发送一个空的它可能是一个空格..检查dd($searchquery==" "?'space':'not a space')
      【解决方案3】:

      这样更简洁易懂

      $searchquery = $request->get('searchqueryfinished');
      
      $searchquery = trim($searchquery);
      
      if(empty($searchquery)) {
        return Retour::where('status', 3)->get();
      }
      
      return Retour::where('status', 3)
                   ->where(function($q) use ($searchquery) {
                      $q->where('rma', 'like', '%'.$searchquery.'%')
                        ->orWhere('naam', 'like', '%'.$searchquery.'%')
                        ->orWhere('framenummer', 'like', '%'.$searchquery.'%');
                   })
                   ->get();
      

      【讨论】:

      • @ZakariaAcharki @JordyGroote 也许问题出在 JS 而不是 PHP 上?您是否为此举办onkeyup 活动?如果没有...请做:)
      • @JordyGroote 你确定你试过我的代码但它不起作用吗?
      • 是的,我试过了,它似乎永远不会进入空状态.. empty($searchquery) 永远不会返回 true,这很奇怪。
      • @JordyGroote 你能在if() 之前做dd($searchquery) 并告诉你得到了什么吗?
      • 您能否尝试注释掉 if() 并检查是否只有 return Retour::where('status', 3)-&gt;get(); 对任何 searchqueryfinished 来说都是正确的?
      【解决方案4】:

      我通过将其拆分为不同的 ROUTES 和不同的公共功能解决了这个问题。

      我开辟了新路线:

      Route::get('/retoursearchall', 'RetoursController@searchretourall');
      Route::get('/retoursearchfinished', 'RetoursController@searchretourfinished');
      Route::get('/retoursearchopen', 'RetoursController@searchretouropen');
      

      当我们在不同的公共函数中时,我可以检查输入是否为空..

      我仍然不完全知道我做错了什么,检查错字的代码是完全相同的,但现在它似乎工作..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-11
        • 2020-06-02
        • 2023-02-20
        • 2017-04-27
        • 1970-01-01
        • 2021-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多