Foros del Web » Programando para Internet » Javascript »

Problema con AJAX y open

Estas en el tema de Problema con AJAX y open en el foro de Javascript en Foros del Web. Buenas! Tengo una librería externa que usa AJAX (creada por mi). Estoy intentando usarla en la web de uno de mis clientes, pero me da ...
  #1 (permalink)  
Antiguo 22/10/2012, 02:46
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Problema con AJAX y open

Buenas!

Tengo una librería externa que usa AJAX (creada por mi). Estoy intentando usarla en la web de uno de mis clientes, pero me da errores.

En chrome funciona sin problemas, pero en el resto de exploradores me da error.

La función que uso para AJAX es la siguiente:

Código:
function createREQ(){
    try{
        req=new XMLHttpRequest();
    }catch(err1){
        try{
            req=new ActiveXObject("Msxml2.XMLHTTP");
        }catch (err2){
            try{
                req=new ActiveXObject("Microsoft.XMLHTTP");
            }catch (err3){
                req=false;
            }
        }
    }

    return req;
}

function requestPOST(url, query, req){
    req.open("post", url, true);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.send(query);
}

function doAjax(url, query, getxml, dtc, vals){
    var myreq=createREQ();
    myreq.onreadystatechange=function(){
        if(myreq.readyState==4){
            if(myreq.status==200){
                var item=myreq.responseText;

                if(getxml==1){
                    item=myreq.responseXML;
                }

                print(item, dtc, vals);
            }
        }else{
            printWait(dtc);
        }};

    requestPOST(url, query, myreq);}
El error me lo da en "requestPOST", concretamente en req.open.

He probado de cambiar el "true" por "false", pero nada. En la página de destino tengo configurado el archivo .htaccess para que acepte peticiones de otros lugares... y como digo, en Chrome va perfecto, pero en el resto no va...

¿Qué podría hacer?

Gracias!

PD: porfavor, eviten respuestas tipo "usa jquery"... jejeje
  #2 (permalink)  
Antiguo 22/10/2012, 08:33
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Problema con AJAX y open

¿pero que error te da?, muéstranos esa info, deberias uasa una consola como firebug en Firefox
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 22/10/2012, 08:42
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: Problema con AJAX y open

El error que me da es (en IE):

Código:
SCRIPT5: acceso denegado
Debugando he encontrado dos códigos de error: 0xc00c023f y -2147024891.
Buscando por internet estos códigos de error no he sacado nada en claro, ya que los temas relacionados "fallan" en una parte en la que a mí no me falla.

Desde firefox me dice la consola de errores (Ctrl+mayus+j)

Código:
Error de seguridad: el contenido en www.webcliente no puede cargar datos de www.webprincipal
He leído que el uso (o no) del prefijo "www" puede influír. Mi web principal (a la que no puedo acceder con AJAX) va con el "www", y así lo pongo en las llamadas AJAX.

En Opera me dice:

Código:
Uncaught exception: ReferenceError: Security violation
No se porqué me tira errores de seguridad... los temas de AJAX-Cross-Domain me superan un poco...

Gracias por responder... a ver si pudiera arreglarlo pronto

Saludos!
  #4 (permalink)  
Antiguo 22/10/2012, 08:46
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Problema con AJAX y open

ajax tiene una limitación de dominios, no puedes hacer peticiones AJAX a otros dominios, si quieres hacer un ajax a una página externa tienes que hacer una de dos:

AJAX crossdomain, JSONp, YQL o similares

usar tu servidor como puente con cURL
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 22/10/2012, 08:53
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: Problema con AJAX y open

Cita:
Iniciado por maycolalvarez Ver Mensaje
ajax tiene una limitación de dominios, no puedes hacer peticiones AJAX a otros dominios, si quieres hacer un ajax a una página externa tienes que hacer una de dos:

AJAX crossdomain, JSONp, YQL o similares

usar tu servidor como puente con cURL
Estuve mirando el tema del CrossDomain con ACD, pero no me acaba de quedar claro del todo...

¿Qué recomendarías tu?

Gracias de nuevo (realmente me sacas de un apuro)...
  #6 (permalink)  
Antiguo 22/10/2012, 09:14
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Problema con AJAX y open

bueno, depende de que es lo que devuelva el otro server, porque JSONp necesita que devuelva un json, JQL y ACD nunca los he probado.

le ventaja de usar cURL desde tu servidor (con un lenguaje como php) es controlar todo el proceso, harías una petición AJAX a tu php, que haga el cURL al servidor externo, trasformas la data y la devuelves según la necesites
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 22/10/2012, 09:29
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: Problema con AJAX y open

Por lo que veo cURL podría servirme... la respuesta de AJAX es texto plano, es decir, llamo a la función AJAX y después uso un innerHTML para insertar el contenido.

Entonces, tendría que tener el cURL en la página que realiza la llamada o en la que la recibe?

Tal como he ido leyendo documentación he podido deducir lo siguiente (corrigeme si me equivoco)

- Meto cURL en la web que realiza la llamada
- Hago cURL(direccion_llamada_api, archivo propio)
- Abro el archivo creado con cURL
- [[A partir de aquí es un tema aparte y creo que me puedo apañar]]

Es así?

Siento mi torpeza... los temas JS me cuestan un poco... jeje

Gracias por contestar y saludos!
  #8 (permalink)  
Antiguo 22/10/2012, 09:34
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Problema con AJAX y open

no, necesitas el cURL en tu servidor, no en el externo.

cURL actuaría como un navegador que hace la petición al server externo

tu haces la petición ajax a tu server y éste al server externo, tu server obtiene la respuesta que se la entregas por salida estandar a tu cliente ajax, el flujo queda como:

Tu página -> petición AJAX -> Tú server -> petición cURL -> dominio externo
dominio externo -> respuesta HTML -> tu server -> respuesta -> XmlHttpRequest (en tu página)

es decir que tu servidor actua como un puente entre tu página y el dominio externo
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #9 (permalink)  
Antiguo 22/10/2012, 09:45
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: Problema con AJAX y open

Cita:
Iniciado por maycolalvarez Ver Mensaje
no, necesitas el cURL en tu servidor, no en el externo.

cURL actuaría como un navegador que hace la petición al server externo

tu haces la petición ajax a tu server y éste al server externo, tu server obtiene la respuesta que se la entregas por salida estandar a tu cliente ajax, el flujo queda como:

Tu página -> petición AJAX -> Tú server -> petición cURL -> dominio externo
dominio externo -> respuesta HTML -> tu server -> respuesta -> XmlHttpRequest (en tu página)

es decir que tu servidor actua como un puente entre tu página y el dominio externo
espera que me lio!! Resulta que ambos servidores son "míos" (son mis clientes)

Entonces, lo que tu quieres decir sería algo así?

Código:
Actualmente:

miweb1.com tiene incluido un script de pagina1.com

miweb1.com llama a doAjax (función de pagina1.com/api/main.js)

--> Error de seguridad

Lo correcto

miweb1.com llama mediante AJAX a miweb1.com/nuevo

miweb1.com/nuevo usa cURL para acceder a pagina1.com

pagina1.com realiza su trabajo, y queda guardado mediante cURL, que a su vez pasa a miweb1.com/nuevo

miweb1.com/nuevo retorna el HTML
De verdad lo siento, para estos temas soy algo duro de mollera... espero haber acertado esta vez >.<

Saludos!
  #10 (permalink)  
Antiguo 22/10/2012, 10:10
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Problema con AJAX y open

no, todavía no me entiendes, el sever con dominio externo no tiene porque se tuyo, lee con atención:

Tu página envía un AJAX hacia TU server -> tu server envía por cURL hacia el dominio o server externo (que NO es tuyo)
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #11 (permalink)  
Antiguo 22/10/2012, 10:16
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: Problema con AJAX y open

Cita:
Iniciado por maycolalvarez Ver Mensaje
no, todavía no me entiendes, el sever con dominio externo no tiene porque se tuyo, lee con atención:

Tu página envía un AJAX hacia TU server -> tu server envía por cURL hacia el dominio o server externo (que NO es tuyo)
Vale, me ha quedado más o menos claro; el tema del server externo resulta que ambos los gestiono yo (por eso te decía que son míos).

Bueno, el temá está en que he entendido cómo tengo que hacerlo. cURL serviría como puente.

Gracias por tus respuestas y tu tiempo.

Saludos!
  #12 (permalink)  
Antiguo 22/10/2012, 10:28
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Problema con AJAX y open

exacto, y aunque el otro server sea tuyo, el problema es ajax con su limitación de dominio, así que si o si tenias que aplicar una solución crossdomain
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #13 (permalink)  
Antiguo 22/10/2012, 10:32
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: Problema con AJAX y open

Cita:
Iniciado por maycolalvarez Ver Mensaje
exacto, y aunque el otro server sea tuyo, el problema es ajax con su limitación de dominio, así que si o si tenias que aplicar una solución crossdomain
Si, eso es lo que pensé en un principio, pero luego añadí una línea en htaccess (Header set Access-Control-Allow-Origin: dominio.com) y desde google chrome me funcionaba... es por eso que me extrañó...

Etiquetas: ajax, funcion, open
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 02:00.