我正在使用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调用中是否需要更改某些内容?
答案 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.
}
});
它有效。