Foros del Web » Programando para Internet » Python »

AJAX distinto dominio

Estas en el tema de AJAX distinto dominio en el foro de Python en Foros del Web. Que tal, estoy iniciando con una aplicación móvil, y manejo el Backend con Django; probé hacer una petición AJAX en mi aplicación de Django y ...
  #1 (permalink)  
Antiguo 11/01/2013, 15:23
Avatar de _Ju
_Ju
 
Fecha de Ingreso: noviembre-2008
Ubicación: Colima, MX
Mensajes: 192
Antigüedad: 15 años, 4 meses
Puntos: 6
AJAX distinto dominio

Que tal, estoy iniciando con una aplicación móvil, y manejo el Backend con Django; probé hacer una petición AJAX en mi aplicación de Django y funcionó correctamente.

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.             $(function() {
  3.                 $.get("/hola", function(data) {
  4.                         alert(data);
  5.                     });
  6.             });
  7.         </script>

Código Python:
Ver original
  1. from django.http import HttpResponse
  2.  
  3. def hola(request):
  4.     if request.is_ajax():
  5.         message = "Hello AJAX"
  6.     else:
  7.         message = "Hello"
  8.  
  9.     return HttpResponse(message)

Hasta aquí todo bien, pero cuando intento hacer la petición AJAX desde diferentes dominios, esto no me anda:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.             $(function() {
  3.                 $.get("http://192.168.1.1/hola", function(data) {
  4.                         alert(data);
  5.                     });
  6.             });
  7.         </script>

En firebug marca que si hace la petición (código 200) pero no muestra el 'alert' con el mensaje.
__________________
www.grupogalco.net

Twitter: @jugalvez
  #2 (permalink)  
Antiguo 11/01/2013, 17:51
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: AJAX distinto dominio

Prueba con esto, no soy realmente bueno en js y mucho menos en su framework de jQuery
Código Javascript:
Ver original
  1. $.ajax({
  2.      url:"http://192.168.1.1/hola/",
  3.      success:function(data){
  4.          alert(data);
  5.      },
  6.      error:function(){
  7.          alert("Error");
  8.      },
  9. });
  #3 (permalink)  
Antiguo 11/01/2013, 18:48
Avatar de _Ju
_Ju
 
Fecha de Ingreso: noviembre-2008
Ubicación: Colima, MX
Mensajes: 192
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: AJAX distinto dominio

Ya lo había probado y es el mismo error, al parecer es error del jQuery, a lo que veo no se puede tomar datos de un servidor externo con $.get, ya probé directamente con $.getJSON y tira el mismo error
__________________
www.grupogalco.net

Twitter: @jugalvez
  #4 (permalink)  
Antiguo 11/01/2013, 19:01
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 7 meses
Puntos: 2114
Respuesta: AJAX distinto dominio

Es una limitación del propio JavaScript; política del mismo origen.

No obstante podrías intentar usar la función getJSON.
  #5 (permalink)  
Antiguo 11/01/2013, 19:05
Avatar de _Ju
_Ju
 
Fecha de Ingreso: noviembre-2008
Ubicación: Colima, MX
Mensajes: 192
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: AJAX distinto dominio

Con getJSON lo hago así

Código Javascript:
Ver original
  1. $.getJSON('http://192.168.1.1:8000/hola/', function(data) {
  2.                 alert('ok')
  3.             }).error(function(){ alert('error') })

Y el error es el mismo; en 'hola' tengo impreso

{"message": "You are In", "result": "failed"}
__________________
www.grupogalco.net

Twitter: @jugalvez
  #6 (permalink)  
Antiguo 11/01/2013, 19:35
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 7 meses
Puntos: 2114
Respuesta: AJAX distinto dominio

He hecho una prueba con esto y funciona bien.

Intenta leer esa URL del ejemplo desde tu script. ¿Tal vez tengas el hola mal estructurado? No sé si tendrá que ver que se haga la llamada a un puerto específico. Lo comento por descartar cosas.
  #7 (permalink)  
Antiguo 11/01/2013, 20:00
Avatar de _Ju
_Ju
 
Fecha de Ingreso: noviembre-2008
Ubicación: Colima, MX
Mensajes: 192
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: AJAX distinto dominio

También me funciona desde el script, eso del puerto no lo había pensado.. no se si afecte en algo o no. Probaré en todo caso hacer la petición a un dominio, debo descartar posibles fallas. Gracias, les diré como me fue
__________________
www.grupogalco.net

Twitter: @jugalvez
  #8 (permalink)  
Antiguo 11/01/2013, 21:20
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: AJAX distinto dominio

Del lado del servidor necesitas este middleware.

Lo que hace es inyectarle un par de cabeceras para que js acepte peticiones no solo get si no también post. De dominios foráneos.
  #9 (permalink)  
Antiguo 12/01/2013, 09:43
Avatar de _Ju
_Ju
 
Fecha de Ingreso: noviembre-2008
Ubicación: Colima, MX
Mensajes: 192
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: AJAX distinto dominio

Esto es nuevo para mi, no se si estoy haciendo bien al agregar el nuevo Middleware, lo hago así:

Código Python:
Ver original
  1. MIDDLEWARE_CLASSES = (
  2. ....
  3. 'proyecto.aplicacion.django-crossdomainxhr-middleware',
  4. )

Y claro, tengo el archivo django-crossdomainxhr-middleware.py dentro de la carpeta de mi aplicación.

Probé colocando la aplicación en heroku (para descartar cualquier error), pero igual, no anda
__________________
www.grupogalco.net

Twitter: @jugalvez
  #10 (permalink)  
Antiguo 12/01/2013, 09:47
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: AJAX distinto dominio

El middleware es una clase, entonces tienes que especificar la ruta a la clase.

Código Python:
Ver original
  1. MIDDLEWARE_CLASSES = (
  2. ....
  3. 'aplicacion.django-crossdomainxhr-middleware.XsSharing',
  4. )
  #11 (permalink)  
Antiguo 12/01/2013, 09:53
Avatar de _Ju
_Ju
 
Fecha de Ingreso: noviembre-2008
Ubicación: Colima, MX
Mensajes: 192
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: AJAX distinto dominio

Genial!! Por fin funcionó!

Gracias chicos!
__________________
www.grupogalco.net

Twitter: @jugalvez

Etiquetas: django, javascript, jquery
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 20:30.