Sincronizaciones con AJAX

Tue, Oct 17, 2006 2-minute read

He solucionado un pequeño problema que teníamos cuando llamábamos a dos funciones que trabajan con un objeto XMLHttpRequest cada una.

La cosa es que teníamos un par de funciones que se llaman cuando se hace un click en un botón. De la siguiente manera:

código del botón:

código javascript:

function saveAndShowChapters() { save_wikibook_chapter(instancia, valor, curso); show_chapters(insancia, curso);}

Con ésto consigo que, apretando dicho botón, se guarde el capítulo que quiera en la base de datos e inmediatamente despues se actualice la lista de capítulos por pantalla.

Parece precioso y perfecto ¿no?

Pues parece que no. Al objecto XMLHttpRequest no le gustaba tanto mareo junto. (Os recuerdo que éstas dos funciones envian y reciben información del servidor con el XMLHttpRequest, y que se llaman una despues de la otra).

La solución de poner un wait() entre las llamadas no entiendo porqué no parecía funcionar.

Así que he optado por poner la segunda llamada en el apartado donde se decide que la función del XMLHttpRequest ha finalizado. De la siguiente manera:

function stateSaveWikibookChapterChanged() { if (xmlHttp.readyState==4 || xmlHttp.readyState==”complete”) { document.getElementById(“saveChapter”).innerHTML=xmlHttp.responseText; show_chapters(instancia, curso); } }

Entonces, en la función saveAndShowChapters() sólo tenemos que llamar a una función:

function saveAndShowChapters() { save_wikibook_chapter(instancia, valor, curso); //show_chapters(insancia, curso);}

Y funciona de maravilla.

Pero, ¿y si alguna vez quiero salvar un capíulo sin mostrarlo? Pues puedo pasarle un parámetro a la funcion save_wikibook_chapter y listos. Cap problema.

AJAX power!