我正在尝试使用AJAX和PHP实现无限滚动。但是它不能正常工作。我正在尝试执行搜索操作。每当用户搜索某个字符串而不是一次加载整个详细信息时。一次加载5个细节(在生产中将增加到50个)。我正在使用AJAX。这是我的PHP代码:
$get_elements_by_date = Jsonresponse::dbconnect()->prepare("SELECT * FROM paths INNER JOIN data ON data.filepath = paths.path_id INNER JOIN user ON data.data_user_id = user.user_id where paths.dir_path like :val and data.date_uploaded = :date_up and user.session_id = :session limit :lim offset :off");
$get_elements_by_date->bindParam( ":session", $_SESSION['user']);
$get_elements_by_date->bindValue(':lim', (int)$lim, PDO::PARAM_INT);
$get_elements_by_date->bindValue(':off', (int)$off, PDO::PARAM_INT);
$get_elements_by_date->bindParam(':val', $val);
$get_elements_by_date->bindParam(':date_up', $_POST['date']);
$get_elements_by_date->execute();
$details = $get_elements_by_date->fetchall(PDO::FETCH_ASSOC);
我正在返回获取的元素。
这是我用于初始搜索的JS代码:
off_search = 0;
$.post('../BaseClass', {
action: 'search_by_date',
search: value,
key: $(".custom-select").val(),
token: $("#token").val(),
date: $("#input_date").val(),
offset: off_search,
},function(data) {
off_search += 5;
console.log(off_search);
if(data.data[0] == 'no')
{
$(".loading1").remove();
$(".table").remove();
$(".upload_content").append("<center><h1 class='result' style='color:red;'>No records found<h1><center>");
}
else
{
// construct the table out of details
}
off_search是充当sql查询中的偏移量的值。每当我得到5个详细信息时,我都会对其进行递增。
这是我的代码,用于将详细信息加载到表中
if(search_values_completed == 1)
{
console.log("returned here " + search_values_completed);
return;
}
$.post('../BaseClass', {
action: 'search_by_date',
search: value,
key: $(".custom-select").val(),
token: $("#token").val(),
date: $("#input_date").val(),
offset: off_search,
},function(data) {
console.log("search values is " + search_values_completed);
if(search_values_completed == 1)
{
return;
}
off_search += 5;
console.log(off_search);
if(data.data[0] == 'no') {
// perform no operation.
search_values_completed = 1;
}
else
{
//add to table
}
上面的代码是一个名为load_search()的函数,我正在
上调用该函数$(window).scroll(function() {
if((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
load_content()
}
}
一旦所有响应都带到了站点,为防止进一步的请求,我正在使用search_values_completed
变量。
我的问题是AJAX是异步的,当我滚动到底部时,它被多次调用。有时它正在请求具有相同偏移值的数据。这导致数据重复。有什么办法可以防止它?
任何建议都接受,需要帮助
如果对问题有任何疑问,请发表评论