Я думаю, вы пропустили несколько ключевых элементов здесь. Во-первых, когда мы используем прокрутку infinte, и мы извлекаем данные из базы данных, вам нужно предложение LIMIT
, предложение LIMIT допускает отношение offset, total
. где offset указывает начало строки, и общее количество строк, которые мы хотим принять.
Первоначально, вы будете иметь что-то вроде этого
$offset = $_GET['offset'] ? $_GET['offset'] : 0; //start at 0th row if no variable set
$total = $_GET['total'] ? $_GET['total'] : 20; // get 20 rows if no variable set
В выше, мы используем трехкомпонентную назначение переменной, чтобы проверить, если аргумент передается нам, если нет, то мы используем по умолчанию стоимость. Мы будем использовать mysqli и подготовленные методы bind_param, execute, bind_result и fetch_assoc().
if($getStream = $mysqli->prepare("SELECT * FROM ? WHERE xxx=? AND status=? ORDER by id LIMIT ?,?"):
$ret = ''; // a variable place holder
// in the above statement, fill in the ?'s
// the actual ? will be the value we wish to return, in order from first to last.
$getStream->bind_param('ssddd', $DBprefix.'xxx', 'xxx', 1, $offset, $total);
//execute our query
$getStream->execute();
$getStream->bind_result($field1, $field2, $field3, $field4); // each field needs it's own variable name, that way we can access them later.
while($row = $getStream->fetch_assoc()):
$ret .= '<div class="my-infinite-element"><h3>'. $field1 .'</h3><p>'. $field2.'</p>'. $field3 .', '. $field4 .'</div>';
endwhile;
echo $ret;
else:
return FALSE;
endif;
Теперь мы обработаем возврат наших данных с использованием MySQLI; теперь давайте сделаем оператор ajax, чтобы вернуть данные.
$.ajax({
type: 'GET',
url : 'infinity.php',
data: {
'offset' : $('.my-infinite-elements').length,
'total' : 20
},
success: function(data){
if(false !== data){
$('#stream').append(data);
}
}
});
В выше, единственное, что мы должны беспокоиться о том, $('.my-infinite-elements').length
. Мы использовали класс my-infinite-elements
для каждого возвращаемого элемента. Таким образом, мы можем подсчитать существующую длину элементов на странице, которая обеспечит наше значение offset
(или где мы хотим начать получать строки). Если мы вытащили 20 результатов из нашей БД, это основано на 0, поэтому мы получим 0-19. Когда мы закончим .length
, мы получим результат 1 based
, который вернет 20
вместо 19. Это нормально, потому что мы НЕ хотим, чтобы и последняя строка вернулась, поэтому наша логика в порядке. Две переменные offset/total
в нашей функции ajax соответствуют нашему назначению тройной переменной.
Проклятие вашего существования будет находиться в 'mysql_'. эта библиотека устарела, полна недостатков и оставляет вас невероятно уязвимой. Пожалуйста, рассмотрите использование 'mysqli_' или даже лучше,' pdo' (объекты данных php) – Ohgodwhy
Спасибо за обновление! – Kim
Создайте php-файл, который может принимать переменную get, которая служит в качестве счетчика того, где в базе данных выбрать. Когда список jquery достигнет конца, опросите сервер, для чего начать, а затем добавьте. –