Archive

Archive for the ‘ajax’ Category

AJAX y bucles

December 5th, 2006 No comments

Llamar a una función que cree un objeto XMLHttpRequest dentro de un bucle es totalmente impensable. Ejemplifico:

funcion impensable(){
var i;
for(i=0; i<10; i++){
crearXMLHttpRequest();
}
}

Ok, si sólo queremos crear un XMLHttpRequest sin utilizarlo, pues ningún problema. Pero obviamente, no crearemos un objeto para no usarlo (exceptuando casos puntuales de exceso de alcohol y/o otras substancias).

El problema está en que, de ésta manera, la velocidad de recorrido de éste bucle es mucho más rápida que la velocidad de envío, recibo y tratado del XMLHttpRequest que se envía.

Así lo que tenemos aquí es que enviamos 10 XMLHttpRequests y sólo nos da tiempo de tratar el último puesto que hemos usado la misma función las 10 veces.

La solución es hacer una función distinta para cada llamada. Pero esto puede hacerse intratable en el caso que no queramos tratar 10 funciones si no un número variable de ellas.

Así pues, lo que he hecho, es añadir un parámetro a la función y llamar a la función creadora con un parámetro. Y cuando tratemos el recibo del XMLHttpRequest, llamaremos otra vez a la función pero con ése valor (i) incrementado.

Algo así:

funcion impensable(i){
var i;
for(i=0; i<10; i++){
crearXMLHttpRequest(i);
}
}

Y en la función que trate el XMLHttpRequest:

funcion tratarXMLHttpRequest(){
if (xmlHttp.readyState == 4){
var i = xmlHttp.responseXML.donde-esté-la-i;
impensable(i+1);
}
}

Creo que esto me ahorrará largos dolores de cabeza.

Categories: ajax, pfc Tags:

Limitaciones de AJAX

November 15th, 2006 2 comments

Todo lo que escribí ayer en el post sobre AJAX SÓLO funciona si trabajamos localmente.

AJAX no puede trabajar con servidores externos a menos que estemos trabajando de manera local. Ludo ha sido quien me ha advertido sobre ésto. Gracias!

Así que para exportar contenidos de una tiddly ésta tendrá que descargarse primero y luego exportar los datos al servidor local.

Mientrastanto, ya he acabo la parte de AJAX y de la Tiddly de nuestro ExportPlugin. Ahora queda la parte de PHP dentro del server de Moodle.

Categories: ajax, exportdfwiki, pfc Tags:

POSTeando con AJAX

November 14th, 2006 1 comment

He implementado las funciones del objeto XMLHttpRequest en nuestro Export plugin des de “casi” cero porque:

(1) Tenemos que pasar la información a exportar por POST ya que por GET no cabría (los tiddlers pueden ser enormes).
(2) La información irá a una URL externa.
(EDIT 15-11-06: ATENCIÓN, trabajar con una URL externa en AJAX sólo es posible si trabajamos con una página que esté guardada localmente. Si metemos la página en un server tendremos problemas de seguridad!).
(3) El Exportplugin original no tiene funciones AJAX implementadas.
(4) Así aprovechamos para aprender un poquito más de esta cosa tan “virguera” que es el AJAX ;)

Voy a explicar un poco cómo me lo he montado y los problemas que he tenido.

Empecemos con las implementaciones que hicimos para wikibook, con el ya típico:

function GetXmlHttpObject()
{
var objXMLHttp=null;
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject(“Microsoft.XMLHTTP”);
}
return objXMLHttp;
}

Ahora ya podremos crear el objecto XMLHttpRequest sin problemas generados por nuestro querido amigo El Micro$oft.

Pero lo queremos pasar por POST. Y además hacia una URL externa. Allá vamos.

Creamos nuestro objeto XMLHttpRequest y le asociamos la función que queremos que haga. En nuestro caso, la función la llamamos stateExportToMoodle:

xmlHttp=GetXmlHttpObject();
xmlHttp.onreadystatechange=stateExportToMoodle;

Vayamos a tratar lo del tema de la URL externa. Deberemos tener en cuenta a los usuarios preocupados por su seguridad, privacidad y, en general, libertad (usuarios de navegadores tipo netscape), ya que a éstos navegadores se les tiene que decir, explícitamente, que el objeto XMLHttpRequest accederá de manera excepcional a una URL externa. Para el resto de usuarios, los del IE, no hace falta.

if (typeof(netscape)!=”undefined”) {
try { netscape.security.PrivilegeManager.enablePrivilege(“UniversalBrowserRead”);}
catch (e) { alert(e.description?e.description:e.toString()); }
}

Si el usuario no tiene permisos para dejar que el objecto XMLHttpRequest acceda a página externas saltará un bonito y toca huevos alert.

Ahora el tema del POST. Abriremos la conexión con nuestra url con el método POST:

xmlHttp.open(“POST”,url);

Y ahora viene la parte importante: debemos definir el Content type de nuestra cabecera del XMLHttpRequest, ya que sinó, la url que lo reciba no sabrá cómo tratarlo y no sabrá que contendrá datos en POST. Así que necesitamos lo siguiente:

xmlHttp.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);

Ahora tan sólo queda enviar el objeto. Supongamos que queremos enviar el objeto con dos parámetros post: sel y wikiname. La cosa sería así:

xmlHttp.send(“sel=valorsel&wikiname=valorwikiname”);

Y ya está. Lo que hagáis con la función stateExportToMoodle ya será cosa vuestra. Yo, de momento, sólo la he usado para comprobar que, efectivamente, todo funciona perfectamente.

Los principales problemas que he tenido han sido:
- No tenía permisos para llamar a una URL externa. No sabía que debía solicitarlos.
- Añadir el campo de la cabecera del XMLHttpRequest para que la página de destino supiera reconocer los datos del POST.

Espero que os haya sido útil.
AJAX power!

Categories: ajax, exportdfwiki, pfc Tags:

Sincronizaciones con AJAX

October 17th, 2006 No comments

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!

Categories: ajax, pfc, wikibook Tags:

Primera interfaz en AJAX

September 25th, 2006 1 comment

Esto del AJAX está genial. De momento he hecho una pequeña interfaz para mostrar los resultados de un par de queries a la base de datos de la Wiki. Y todo se carga dinámicamente en la página, sin tener que sincronizar con nada. AJAX, ¡limpieza profunda!

Trabajo para el miércoles finalizado. A ver qué dice mi capataz.

Nota: Éste post es básicamente estúpido, puesto que es solamente para mí. Entonces, ¿por qué postear? Para tener un repositorio para luego hacer la memória del proyecto. Yo No Soy Vago.

Nota2 EDIT!: Gracias Ludo por la corrección ortográfica. En realidad ya lo sabía, sólo estaba comprobando si alguien se leía ésto o no. (ehem… ¿cuela? ;)

Categories: ajax, moodle, pfc Tags:
viagra viagra women Pmidnbsp10612811. Sloughing of a fibroid is often experienced as a sudden onset of intense crampy pain and an odorous vaginal discharge. Sloughing of a fibroid is often experienced as a sudden onset of intense crampy pain and an odorous vaginal discharge. 1 chance that fibroids can come back fibroids tend to grow back, unless you have your uterus taken out. http://aciko.com.tr/wwasher/excellent.php?jhr=52749 http://frutasbonillo.com/bgc-56779/ Most uterine fibroids are asymptomatic but they can cause significant morbidity, including prolonged or heavy menstrual bleeding, pelvic pressure or pain and... tvd.ro/mfa-51495/ 1 chance that fibroids can come back fibroids tend to grow back, unless you have your uterus taken out. Fibroids remain the number one reason for hysterectomies in the united states. nbsp an agenda for research into uterine artery embolization: results of an expert panel conference. Whatever the etiology, the misplaced endometrial cells then respond to hormonal stimulus just like the endometrium is supposed to. http://hamptoncycles.com.au/igu-57302/ The information provided herein should not be used during any medical emergency or for the diagnosis or treatment of any medical condition. Several innovative options are under investigation as possible future medical treatments for uterine leiomyomas. viagra 10mg rezeptfrei There is a myth that every fibroid is cancerous but this is not true. limpiezasmercedes.net/nnb-59039/ side effects viagra blurred vision Fibroids remain the number one reason for hysterectomies in the united states.