2017-11-28 26 views
0

データベースから結果を得る検索ボックスをPHPで検索しています。私は検索をライブにしたいので、結果を得るためにAjaxスクリプトを使用しています。Ajaxが照会結果の代わりにすべてのデータベースレコードを返す

これはjavascriptのである:

$(function() { 
    $('#search').keyup(function() { 
    var txt = $(this).val(); 
    if (txt != '' && txt.length >= 6) { 
     $.ajax({ 
     method: 'POST', 
     url: '{{ path_for('search.post') }}', 
     success: function(data) { 
      console.log(data);// Do stuff with data. 
     } 
     }); 
    } else { 
     $('#search_results').html(''); 
    } 
    }); 
}); 

path_for( 'search.post')は(スリム3を使用して)PHP関数を呼び出します。この機能は次のとおりです。

$queryString = "SELECT displayName 
        FROM guests 
        INNER JOIN shows ON guests.showId = shows.showId 
        WHERE (displayName LIKE :search OR talk_title LIKE :search) AND shows.active = 1 AND guests.active = 1 
        ORDER BY gLastName"; 

$searchQuery = $this->c->db->prepare($queryString); 
$searchText = '%'.$request->getParam('search').'%'; 
$searchQuery->bindValue(':search', $searchText, PDO::PARAM_STR); 
$searchQuery->execute(); 

$results = $searchQuery->fetchAll(PDO::FETCH_ASSOC); 

$jsonResults = json_encode($results); 

echo $jsonResults; 

私が直接PHPを実行した場合、私は(私は検索内容に応じて、通常は1または2)のために検索されたレコード(複数可)でJSON文字列を取得します。しかし、Ajaxを実行させると、データベースのすべてのレコードが返されます。私はなぜこれが理解できません。

ajaxがecho 'yes'に変更して正しいPHPを呼び出していることがテストされている場合。私がこれをしたとき、私は文字列「はい」を受け取りました。

Ajaxコールを変更する必要がありますか?

答えて

0

私はエラーの内容を理解しました。 $ request-> getParam( 'search')は、PHPを直接実行する場合にのみ動作しますが、パラメータがポストされていないためAjaxでは動作しません。それが働いた

$.ajax({ 
     method: 'POST', 
     url: '{{ path_for('search.post') }}', 
     data: {search:txt}, 
     dataType: 'text', 
     success: function(data) { 
      console.log(data);// Do stuff with data. 
     } 
     }); 

は、私がこれまでのAJAX呼び出しを変更したら。

関連する問題