Ajax返回所有数据库记录而不是查询结果

时间:2017-11-28 19:02:50

标签: php jquery ajax slim

我正在使用PHP中的搜索框来获取数据库的结果。由于我希望搜索生效,因此我使用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')调用PHP函数(使用Slim 3)。这个功能是:

$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,我会得到一个json字符串,其中包含我搜索过的记录(通常是一两个,具体取决于我搜索的内容)。但是,如果我让Ajax运行,我会收回数据库中的每条记录。我不明白为什么会这样。

如果已通过更改为echo' yes'来测试ajax正在调用正确的PHP。当我这样做时,我收到了字符串'是'回来。

在Ajax调用中是否需要更改某些内容?

1 个答案:

答案 0 :(得分:0)

我刚刚意识到错误是什么。 $ request-> getParam(' search')仅在我直接运行PHP时有效,但由于参数未发布,因此无法使用Ajax。

我将ajax调用更改为:

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

它有效。