Foros del Web » Programando para Internet » Javascript » Frameworks JS »

HTTPRequest, onreadystatechange y llamados simultaneos

Estas en el tema de HTTPRequest, onreadystatechange y llamados simultaneos en el foro de Frameworks JS en Foros del Web. Estoy acostumbrado a utilizar estas funciones para trabajar con AJAX, con la idea de poder utilizar ante distintos casos las mismas funciones cuando contesta el ...
  #1 (permalink)  
Antiguo 12/03/2007, 20:07
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 6 meses
Puntos: 2
HTTPRequest, onreadystatechange y llamados simultaneos

Estoy acostumbrado a utilizar estas funciones para trabajar con AJAX, con la idea de poder utilizar ante distintos casos las mismas funciones cuando contesta el server(readyState == 4), y por eso utilizo una funcion CallBack.

Funcion para crear el Obj HTTPRequest
Código PHP:
function CrearAjax() {
    var 
ro;
    var 
browser navigator.appName;
    if(
browser == "Microsoft Internet Explorer"){
        
ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        
ro = new XMLHttpRequest();
    }
    return 
ro;
}
var    
_ajax CrearAjax(); 
Funcion para hacer una peticion al server
Código PHP:
function sendAjax(page,paramsfunctionCallBack){
 
 
_ajax.open('get',page+'?'+params,true);
 
_ajax.setRequestHeader('Content-Type''application/x-www-form-urlencoded');
 
_ajax.onreadystatechangefunctionCallBack;
 
_ajax.send(null);

Funcion ejemplo para tratar la respuesta
Código PHP:
function getDataCallBack(){
    
    if(
_ajax.readyState == 4){
        var 
res _ajax.responseText;            
        
setDiv('d_main',makeJSONGrid(res));
    }

Problema:

Como ven utilizo una variable global _ajax, y mi problema esta cuando quiero hacer varias llamadas en paralelo para obtener diferente info. No puedo tener varios _ajax ya que no se cuantos llamados en paralelo haga. Tampoco puedo crearlos dentro de la funcion sendAjax porque pierdo la encapsulacion que logro con la funcion CallBack y esto representa muchas lineas de codigo de gusto.

Pregunta:

Puedo hacer algo del estilo
Código PHP:
_ajax.onreadystatechangefunctionCallBack(_ajax); 
y de esta forma creo dentro de sendAjax el objeto y en el if de la funcionCallBack utilizo ese objeto pasado por parametro para el
Código PHP:
if(_ajax.readyState == 4){ 

Mil gracias por el tiempo!
__________________
Keep it simple and keep it fast.
  #2 (permalink)  
Antiguo 16/03/2007, 19:13
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
Re: HTTPRequest, onreadystatechange y llamados simultaneos

loading.............


_ajax.onreadystatechange= functionCallBack(_ajax);

eso está mal porque no asignas una funcion de retorno sino un retorno de funcion a onreadystatechange, ahora para no perder la encapsulacion deberias hacer

Código PHP:
function sendAjax(page,paramsfunctionCallBack)
{
var    
_ajax CrearAjax(); 
 
_ajax.open('get',page+'?'+params,true);
 
_ajax.setRequestHeader('Content-Type''application/x-www-form-urlencoded');
 
_ajax.onreadystatechangefunctionCallBack;
 
_ajax.send(null);

o bien

Código PHP:
function sendAjax(page,paramsfunctionCallBack)
{
var    
_ajax CrearAjax(); 
 
_ajax.open('get',page+'?'+params,true);
 
_ajax.setRequestHeader('Content-Type''application/x-www-form-urlencoded');
 
_ajax.onreadystatechange= function()
                                          {
                                               
functioncallBack(_ajax);
                                          };
 
_ajax.send(null);


connection closed.
__________________

Maborak Technologies
  #3 (permalink)  
Antiguo 16/03/2007, 19:45
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 6 meses
Puntos: 2
Re: HTTPRequest, onreadystatechange y llamados simultaneos

EXELENTE!

Tu segunda opcion es lo que buscaba!..

GRACIAS! y Saludos
__________________
Keep it simple and keep it fast.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:18.