【发布时间】:2017-03-31 05:38:41
【问题描述】:
如果我滚动 .dropdown-menu 的底部,我想在数据库中加载更多 7 行。我不知道为什么不使用这个脚本。 我正在使用引导 css 和 js。 我用实时搜索尝试了 bootstrap-select.js,但我在“城镇”数据库中有 2000 行,而 bootstrap-select 没有“加载更多”功能。
<meta charset="utf-8">
<link rel="stylesheet" href="bootstrap.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="bootstrap.js"></script>
<style>.dropdown-menu{height: auto;max-height: 150px;overflow-x:hidden;}</style>
<div class="dropdown">
<input class="dropdown-toggle" data-toggle="dropdown" id="live" placeholder="Town">
<ul class="dropdown-menu"></ul>
</div>
<script>
$(document).ready(function () {
var limit = 7;
var start = 0;
var action = 'inactive';
var location = $('#live').val();
$('.dropdown-menu').hide();
function search() {
var limit = 7;
var start = 0;
var action = 'inactive';
var location = $('#live').val();
if (location != '') {
$('.dropdown-menu').show();
$.ajax({
url: "search.php",
type: "POST",
data: {location:location, limit:limit, start:start},
cache: false,
success: function(data) {
$('.dropdown-menu').html(data);
if(data == '') {
$('#load').text('No more data.');
action = 'active';
} else {
$('#load').text('Loading...');
action = 'inactive';
}
$('.dropdown-menu li a').click(function() {
$('.dropdown-menu li a').removeClass('active');
$(this).addClass('active');
var active = $('li a.active').html();
$('#live').val(active);
});
}
});
} else {
$('.dropdown-menu').hide();
$('.dropdown-menu li a').removeClass('active');
}
};
if (action == 'inactive') {
action = 'active';
$('#live').on('keyup change', search);
}
$(window).scroll(function(){
if ($(window).scrollTop() + $(window).height() > $(".dropdown-menu").height() && action == 'inactive') {
action = 'active';
start = start + limit;
setTimeOut(function(){
$('#live').on('keyup change', search);
}, 1000);
}
});
});
</script>
搜索.php:
<?php
$connect = mysqli_connect("localhost", "root", "", "mydb");
$location = $connect->real_escape_string($_POST["location"]);
if (isset($_POST["location"])) {
$data = mysqli_query($connect, "SELECT * FROM towns WHERE town LIKE '%".$location."%' ORDER BY id LIMIT ".$_POST["start"].", ".$_POST["limit"]."");
$data_count = mysqli_num_rows($data);
if ($data->num_rows === 0) {
echo '<li>No data!</li>';
} else {
while ($row = mysqli_fetch_array($data)) {
echo '<li><a href="#">'.$row["town"].'</a></li>';
}
echo '<div id="load"></div>';
}
}
?>
【问题讨论】:
-
您缺少标题:
<title>MySQL injection test tool</title> -
这只是这个脚本的测试页面。
-
这就给了你一个借口?使用准备好的语句使其安全需要额外的 15 秒?我把这个原因称为纯粹的懒惰,如果我是你的老板,我会立即解雇你。还有一些关于如何假设连接和查询 100% 成功的问题。
标签: javascript php jquery ajax