[3 DÚVIDAS] Erro de código "Carregar conteúdo se Scroll atingir o fim da página"

Não importa se não tiver uma solução…Tão importante quanto ela, são as dicas de com chegar alcança-la…

Eu tenho um script que “carrega conteúdo por AJAX” após atingir o fim da página, porém ele tem um erro.

Quando o scroll chega no fim da página, duas condições do IF são satisfeitas
if (per === 1 || clientMax === scrollMax) e nesta hora é são realizadas duas requisições AJAX neste caso…

  1. Duvida - Alguém consegue identificar o erro desse código? O que eu posso fazer ele fazer apenas 1 requisição?

  2. Dúvida - Para carregar o conteúdo do meu site, eu preciso de 3 parâmetros… Dois tipo, tipo=“a” e tipo=“b” das postagens, e o nome do Usuário vindo do PHP, como eu passo esses parâmetros aqui? seria qui nesta parte da função? window.onscroll = onScroll; tem alguma relação com função declarativa, anônima ou literal? Estou começando a ver sobre
    Aqui é onde eu chamo a Função.

  3. Pior dúvida - Assim como no GUJ e Facebook, uma hora a função window.onscroll = onScroll;
    para de trazer o conteúdo, porque não há mais o que carregar.
    Alguém tem um ideia de como fazer uma função parar de ser Executada? Eu acredito que haja uma relação entre PHP e JavaScript, seria alguma coisa de PHP ou JavaScript Orientada a Objeto?

Qualquer dica será que grande ajuda, não sou tão bom em programação , mas já iniciei PHP Orientada a Objeto para tentar solucionar alguns desses problemas.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Como Funciona o SCROLL</title>
<style>
#ondeEstaOScroll {
    position:fixed;
    width:150px;
    right:0px;
}
.linha {
    color:#ccc;    
}
</style>
 <script>
function onScroll() {
    var scrollEsta, scrollMax, clientMax, per;
    
    //Retorna os pixels do documento actual foi rolado (vertical) a partir do canto superior esquerdo da janela.
    scrollEsta = document.documentElement.scrollTop || window.pageYOffset;
    
    //Retorna a altura visível do conteúdo em uma página (não incluindo as fronteiras, margens, ou barras de rolagem)
    scrollMax = document.documentElement.scrollHeight;
    
    //Retorna a altura total de um elemento (incluindo áreas escondidas com barras de rolagem)
    clientMax = document.documentElement.clientHeight || document.body.clientHeight;
    
    per = scrollEsta / (scrollMax - clientMax);
    if (per === 1 || clientMax === scrollMax) {
        //Aqui entra minha Requisiçao AJAX - No meu site nesta hora são excecutadas 2 requisições simultâneas 
        //Comente o alert (linha 34) e Descomente a linha (33) abaixo...Dá erro, o conteúdo é adicionado enquanto estiver rolando o Scroll
        document.getElementById("p").innerHTML += '<div style="padding:50px;background:#f4f4f4;border:1px solid #ccc;width:500px;margin: 10px auto;text-align:center;">O SCROLL CHEGOU AO FIM DA PÁGINA - NO MEU SITE, NESTA HORA SÃO FEITAS 2 REQUISIÇÕES AJAX</div>';
        //alert("O Scroll chegou ao fim");
    }
      document.getElementById("ondeEstaOScroll").value = scrollEsta;
}
window.onscroll = onScroll;
window.onload = function () {
    for (i = 0; i <= 100; i += 1) {
        document.getElementById("p").innerHTML += '<span class="linha">Linha     </span>' + i.toString()+'<br/>';
    }
}
</script>
</head>

<body>
<input type="text" id="ondeEstaOScroll">
<p id="p"></p>
</body>
</html>

Abraço à todos!!!