I have these two codes I've done to load data on scroll and display it in two different divs (.cat_a and .cat_b).
Data is stored as objects in a json file and printed out 3 at a time from get_data.php.
I'm not familiar with JS and jQuery, is there a way to simplify and clean them?
Load data on (div class=".cat_a"):
<script type="text/javascript">
$(document).ready(function() {
var flag = 0;
$.ajax({
type: 'GET',
url: 'get_data.php',
data: {
'offset': 0,
'limit': 3,
'cat': "cat_a"
},
success: function(data) {
$('.cat_a').append(data);
flag += 3;
}
});
$(window).scroll(function() {
if ($(window).scrollTop() >= $(document).height() - $(window).height()) {
$.ajax({
type: 'GET',
url: 'get_data.php',
data: {
'offset': flag,
'limit': 3,
'cat': "cat_a"
},
success: function(data) {
$('.cat_a').append(data);
flag += 3;
}
});
}
});
});
</script>
Load data on (div class=".cat_b"):
<script type="text/javascript">
$(document).ready(function() {
var flag = 0;
$.ajax({
type: 'GET',
url: 'get_data.php',
data: {
'offset': 0,
'limit': 3,
'cat': "cat_b"
},
success: function(data) {
$('.cat_b').append(data);
flag += 3;
}
});
$(window).scroll(function() {
if ($(window).scrollTop() >= $(document).height() - $(window).height()) {
$.ajax({
type: 'GET',
url: 'get_data.php',
data: {
'offset': flag,
'limit': 3,
'cat': "cat_b"
},
success: function(data) {
$('.cat_b').append(data);
flag += 3;
}
});
}
});
});
</script>
I reduced the redundancies in your code and added comments.
$(document).ready(function() {
//create a method that can be called for each category
//it also scopes a flag variable for each one
function getDataFor(category) {
var flag = 0;
//the ajax call is made the same for the initial call and on scroll
//so that's another method
function getData() {
$.ajax({
type: 'GET',
url: 'get_data.php',
data: {
'offset': 0,
'limit': 3,
'cat': category
},
success: function(data) {
$('.' + category).append(data);
flag += 3;
}
});
}
getData(); //do our initial ajax call for the category
//these jQuery variables are made multiple times in the scroll event
//so we can cache them for some performance
var $window = $(window);
var $document = $(document);
$window.on('scroll', function() {
if ($window.scrollTop() >= $document.height() - $window.height()) {
//call our ajax again on scroll when needed
getData();
}
});
}
//call the method for each category we want to perform the logic on
getDataFor('cat_a');
getDataFor('cat_b');
});
</div>