El archivo recuperar.php de ninguna manera podrá quedar esperando más parámetros para devolver una respuesta pausada. Recibe parámetros, procesa, devuelve la respuesta y termina su ejecución. Si lo llamas otra vez se ejecutará todo de nuevo, por esto deberás dar parámetros adicionales (por GET o POST) de forma que no siempre devuelva la misma respuesta.
Sin consideraciones de velocidad, comprobación de la conexión, parámetros incorrectos u otros factores, podrías hacer algo como:
Código:
function objetoAjax() {
...
}
var dato, offset, procesamiento = null;
function limpiar(){
try { window.clearInterval(procesamiento); }catch(e) {}
offset = 0;
procesamiento = null;
dato = null;
}
function pedir_auxiliar() {
var Ajax = objetoAjax();
Ajax.open("get","recuperar.php?codigo=" + dato + '&offset='+offset, true);
Ajax.onreadystatechange = function() {
if (Ajax.readyState == 4 && (Ajax.status == 200 || Ajax.status == 501)){
var retorno = eval(Ajax.responseText);
if(retorno == null) limpiar();
else MostrarRegistros(retorno);
}
}
Ajax.send(null);
offset +=2;
}
function pedir(seleccion) {
limpiar();
dato = seleccion;
procesamiento = window.setInterval(pedir_auxiliar,4000);
}
function MostrarRegistros(numero){
...}
Es decir, declarar variables globales e iniciar un nuevo intervalo cada vez que se llama a pedir.
También deberás pasar un parámetro adicional a recuperar.php (en este caso offset) para que este sepa en que parte del ciclo vas.
Por último deberás definir una bandera a retornar por recuperar.php (en este caso null) para así saber en funcion.js cuando detener el intervalo.
En recuperar.php, obviamente, deberás filtrar la consulta con LIMIT y OFFSET (según el parámetro nuevo).