Ajax – cakephp4 – onKeyUp – wyszukiwanie projektów po nazwie

Wyszukiwanie projektów po numerze (ciąg znaków) Ajax

Kod Javascript

function clearResults() {
    removeHiddenUserField();
    $('#search-results').empty();
}

$("#search-project").on('keyup', function(){
  clearResults();
  var name_str = $(this).val();
  var name_len = name_str.length;

  if( name_len >= 3 ) {
      var t;
      if(t) { window.clearTimeout(t); }
      t = window.setTimeout( function() { liveSearch(name_str); }, 200 );
  } 
});
let liveSearch = function(search_str="") {
    var url = '/operator/projects/search-by-number.json';
    var ul_results = $("#search-results");
    $.ajax({
            type    : 'post',
            data    : { search_str },
            dataType: 'json',
            url     : url,
            success : function(resp) {
              if(resp.resp.error) {
                console.error(resp.resp.error);
                return;
              }

              resp.resp.success.forEach( function(row, ind){
                var name = row.number +" - "+row.name;

              });

            },
            error: function(e) { console.warning(e); }
    });
};

Kontroler Projects – PHP

  public function searchByNumber()
    {
      if( $this->request->is('ajax') )
      {
        $number = (string) $this->request->getParsedBody()['search_str'];

        $projects = $this->Projects->find()
              ->select(['id', 'name', 'number'])
              ->where(['number LIKE' => "%".$number."%"])
              ->all();

        if($projects) {
          $resp['success'] = $projects ;
        } else {
          $resp['error'] = "Nie ma takiego projektu";
        }
        $this->set('resp', $resp);
        $this->viewBuilder()->setOption('serialize', ['resp']);
      }
    }