t

tekki

Usuario (Argentina)

Primer post: 22 jun 2011Último post: 22 jun 2011
1
Posts
0
Puntos totales
475
Comentarios
P
Prototype - Llamada a Ajax.Request dentro de mi clase
LinuxporAnónimo6/22/2011

Antes que nada buenas noches. Voy a postear esto ya que me sirvió mucho y me costó resolverlo googleando no encontré casi nada. Basicamente estaba haciendo una clase con el framework de Prototype para en la cual uno de sus métodos contiene una llamada a la clase Ajax.Request de este framework. Yo necesitaba que dentro de los eventos de ( onSuccess, onFailure, etc ) de la llamada a Ajax.Request se modificaran los valores de mi clase, cosa que no estaba sucediendo. Ahora les pongo un código de ejemplo y luego como lo solucioné: Código original: var awAjax = Class.create({ // inicializa los miembros de la clase initialize: function(){ this.navegador = new awNavegador; // instancio clase awNavegador this.host = new awHost; // instancia de awHost this.parametros = null; // parámetros que se van a pasar this.resultado = null; // resultado de la consulta this.url = null; // url del metodo. this.auto_url = false; // si está en true se usa la clase awHost para armar la url this.metodo = null; // pagemethod al que queremos llamar... this.tipo_contenido = "application/json; charset=utf-8"; // valor por defecto... this.mensaje = null; // mensaje al finalizar la llamada this.error = false; // indica si hubo error en la comunicacion this.asyncronica = true; // usar comunicación asincrónica this.elemento = null; // elemnto DOM donde se mostrará la imagen cargando... this.imagen = null; // ruta de la imagen this.estado = null; // Codigos de estado de operación http // llama a un pagemethod según lo seteado en los parametros... Llamar: function(){ // validaciones... new Ajax.Request(this.url,{ method: 'post', asynchronous: false, parameters: Object.toJSON(this.parametros), contentType: this.tipo_contenido, requestHeaders : {Accept: 'application/json'}, // la llamada tuvo exito... onSuccess: function(transport){ try{ var aux = transport.responseText.evalJSON(true); // trato de levantar datos con cláusula /*-secure- n*/ this.resultado = aux.d; //esto nunca pasa this.error = false; //esto nunca pasa this.mensaje = "ok"; // esto nunca pasa } catch(e){ // handelo error... } }, //(otras funciones... ) }); Si llamo mi clase desde la página que la quiero usar me pasaba lo siguiente: var miClase = new awAjax(); miClase.parametros = "algun parametro"; miClase.Llamar(); // hago la llamada ajax alert(miClase.mensaje + "-" + miClase.resultado) // -> null La llamada al Ajax.Request no tenía acceso los datos de mi clase que invocaba a la misma, esto es correcto ya que no pertenecían al mismo contexto. Para solucionar esto, rastree en la api de prototype y con la función bindAsEventListener de prototype solucioné el problema. Hay que colocar el código después de la funcion que llamamos en el evento onSuccess: .... onSuccess:function(transport){ // etc etc... }.bindAsEventListener(this) Con esto logramos que la llamada al Ajax.Request se ejecute dentro del contexto que queríamos y pueda modificar los atributos de la clase que la llama. La implementación de antes en la web quedaría asi: var miClase = new awAjax(); miClase.parametros = "algun parametro"; miClase.Llamar(); // hago la llamada ajax alert(miClase.mensaje + "-" + miClase.resultado) // -> "ok - funciono" Bueno espero que a alguien le sirva. Prometo postear para la próxima una librería que genera imágenes de código de barra en Prototype y JQuery y como usar las dos librerías juntas. Saludos. Si no quieren comentar todo bien.

0
14
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.