为无限滚动添加ajax
Adding ajax to infinite scroll
我刚刚创建了一个方法,通过创建以下函数在我的网站上运行无限滚动:
window.onscroll = yHandler;
function yHandler(){
var wrap = document.getElementById('wrap');
var contentHeight = wrap.offsetHeight;
var yOffset = window.pageYOffset;
var y = yOffset + window.innerHeight;
if(y >= contentHeight){
wrap.innerHTML += '<div class="newData"></div>';
}
}
它在用户向下滚动页面时创建了一个简单的div。我在html中调用它:
<div id="wrap">
<img src="NYC.jpg">
</div>
我的页面上只有一张较大的图片,它占用了测试的空间。
我想添加信息从mysql使用ajax,但我有麻烦这样做。我使用以下Ajax与数据库交互:
$.ajax({
url: "scroll.php",
data: "";
dataType: 'json',
success: function(result){
//get the variables here.
}
});
我的问题是,我不明白如何调用函数和Ajax彼此使其全部工作。我尝试将Ajax放入函数中,但似乎没有做任何事情。当需要创建一个新的div时,我如何同时调用我创建的函数和Ajax ?
My PHP is:
$return_arr = array();
$fetch = mysqli_query("SELECT User_Id, First_Name, Last_Name FROM Users");
while ($row = mysqli_fetch_array($fetch, MYSQLI_ASSOC)) {
$row_array['User_Id'] = $row['User_Id'];
$row_array['First_Name'] = $row['First_Name'];
$row_array['Last_Name'] = $row['Last_Name'];
array_push($return_arr,$row_array);
}
echo json_encode($return_arr);
我认为使代码工作的最简单方法是像这样修改if语句:
if(y >= contentHeight){
$.ajax('scroll.php').done(function(data) {
// variables: data['variable_name']
// or if returning HTML:
wrap.innerHTML += '<div class="newData">' + data + '</div>';
})
}
但是,考虑到一旦滚动到站点的内容之外,就会为每个滚动事件向scroll.php发送请求——这可能会淹没服务器,因此我建议将调用包装在debounce函数中。debounce函数基本上允许您在给定的时间间隔内调用一个函数一次。如果您不想编写自己的debounce函数,我建议使用下划线库:http://underscorejs.org。代码看起来像这样:
if(y >= contentHeight){
_.debounce(
$.ajax('scroll.php').done(function(data) {
wrap.innerHTML += '<div class="newData">' + data + '</div>';
}
), 1000) // Only fetch once every second
}
"结果"变量实际上是您从sql数据库的响应,这是JSON(如评论中所述)。因为你没有给你的php脚本(看到你的sql选择语句),然后把你的sql column_name(属性)而不是"your_sql_column_name"。
var array = [];
$.ajax({
type: "GET",
url: "scrol.php",
dataType: "json",
success: function (result) // response is already JSON, dont' need to parse
{
alert(result[0].your_sql_column_name); // testing purpose
for (var i = 0; i < num_of_elements; i++) {
array.push(result[i].your_sql_column_name); //storing values inside an array
}
}
});
相关文章:
- 没有为Ajax添加的新元素注册Jquery事件
- Gmaps4rails:What'这是通过AJAX添加标记后启用集群的正确方法
- 让 jquery 为 ajax 添加的元素工作的最佳方法是什么?
- 防止多次显示弹出窗口.Ajax添加结果已在DOM中注册
- AJAX添加多个事件插入前重置Id
- 几个 Ajax 添加到购物车表单在一个页面上
- 谷歌地图使用AJAX添加标记
- 将 AJAX 添加到带计数器的轨道 4 喜欢/不喜欢按钮
- 使用 AJAX 添加选择选项以选择.js
- 如何在通过 ajax 添加到页面的元素上执行 jQuery 方法
- 无法使用 ajax 添加注释
- jQuery不会为使用AJAX添加的链接触发
- jQuery 和 AJAX - 使用 Ajax 添加的对象动态不适用于 jQuery 函数
- 如何使用 Javascript submit 将 Jquery ajax 添加到现有表单中
- Rails-将ajax添加到部分中,'未定义的方法`render''
- 如何使用ajax添加到相关产品的购物车magento
- 如何使用JQuery或AJAX添加php-include语句
- 使用jQuery Ajax添加加载和错误文本
- 使用Django + Ajax添加Like按钮
- 我不能对通过$.ajax添加的元素使用日期选择器