进一步解释:
这是我的AJAX:
$(document).ready(
function loadAll (param) {
$.ajax({
url: 'functions.php',
type: 'POST',
dataType: 'JSON',
data: {task: "load", last_id: param},
success: function(data) {
$.each(data, function(i, attr) {
$("#result").append("<tr><td style='width:300px;'>" + attr.actor_id + "</td><td style='width:300px;'>" + attr.first_name + "</td>");
})
}
})
});
$(window).scroll(function () {
if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
//Perform the loadAll() function using the last ID of the last query performed
//and then appending it to the #result
}
});
这里我基本上是发送请求并将其附加到我的html中的#result
。然后,当用户完全向下滚动时,我希望该函数发送上次执行的查询的last_id
,并检索返回的新项目的新查询。
这是我的PHP:
if (isset($_POST['task']) && $_POST['task'] == "load") {
$last_id = isset($_POST['last_id'] ) ? (int)$_POST['last_id'] : 0;
$stmt = $connection->prepare("SELECT * FROM actor WHERE actor_id > (?) ORDER BY actor_id LIMIT 0, 30");
$stmt->bind_param('i', $last_id);
$stmt->execute();
$result = $stmt->get_result();
$encode[] = array();
while( $row = $result->fetch_assoc() ) {
$encode[] = $row;
}
echo json_encode($encode);
}
此查询检查是否设置了'last_id',如果没有,则last_id设置为0.这样可以正常工作。
这是我的HTML(如果重要的话):
<div class="container">
<h1>Making an infinite scroll</h1>
<p>Load posts below:</p>
<div id="result"></div>
</div>
问题:如何使用AJAX查询查询的最后一个ID,然后使用上一个ID进行另一个查询?
这是我设想的程序:
1 - POST请求,返回第一个查询[actor,来自0,30的actor],将其追加到#result
2 - 将查询的最后一个ID保存到变量
中3 - 如果用户向下滚动到页面末尾,请使用上一个查询的最后一个ID [actor_id为30,到60的actor]执行另一个查询,然后追加它到#result div。
非常感谢任何帮助。
答案 0 :(得分:1)
您可以将最后提取的ID与查询结果一起发送
while( $row = $result->fetch_assoc() ) {
$encode[] = $row;
}
$last_id = $encode[count($encode)-1]['actor_id'];
echo json_encode( array('encoded' => $encode, 'last_id' => $last_id) );
然后在客户端(你的jquery代码),你就像这样做:
var last_id = 0;
function loadAll (param) {
$.ajax({
url: 'functions.php',
type: 'POST',
dataType: 'JSON',
data: {task: "load", last_id: param},
success: function(data) {
results = data.encoded;
last_id = data.last_id;
$.each(results, function(i, attr) {
$("#result").append("<tr><td style='width:300px;'>" + attr.actor_id + "</td><td style='width:300px;'>" + attr.first_name + "</td>");
})
}
})
}
$(window).scroll(function () {
if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
loadAll(last_id);
//Perform the loadAll() function using the last ID of the last query performed
//and then appending it to the #result
}
});
我不确定我的问题是否正确,但我想这可能是您问题的解决方案。
PS:
SELECT * FROM actor WHERE actor_id > (?) ORDER BY actor_id LIMIT 0, 30
为什么你没有像
那样做,有什么特别的原因SELECT * FROM actor ORDER BY actor_id LIMIT (?), 30
答案 1 :(得分:0)
我不完全理解您的问题所以您可能需要扩展,因为它不清楚。
但是你确实有语法错误。
你说这是&#39; last_id&#39;是POST请求时的GET请求。
应该是这样的:
(isset($_POST['last_id']) && $_POST['last_id'] >= 1) ? $last_id = $_POST['last_id'] : $last_id = 0;