2012-07-26 15 views
5

Hoy he encontrado un error muy extraño al intentar obtener el contenido de un archivo PHP en mi servidor con $.get.

Sucede solo en Safari y Chrome en Mac OS X (Snow Leopard), en Windows funciona correctamente en todos los navegadores.

La función es como:

function _fc() { 
    $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { 

     if (data=='0') { letItGo=true; $('#loginform').submit(); } 
     else ...//Do some other checks 
    }); 
} 
  • que no es un servidor local, que es un servidor web con un dominio existente
  • No estoy tratando de realizar cualquier ajax entre dominios. Ambos archivos están en el mismo directorio.

No encontré ninguna solución para eso.

error exacto:

XMLHttpRequest cannot load 
http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something. 
Origin http://asking1.com is not allowed by Access-Control-Allow-Origin. 
+0

Cuando dices que solo ocurre en Mac OS X, te refieres al sistema operativo del cliente, ¿no? ¿Es el mismo servidor en tus pruebas Mac OS X y tus pruebas de Windows? –

+0

Sé que estos son diferentes navegadores, pero en ambos el código no funciona. Mi servidor está basado en Unix, solo lo pruebo en Windows y Mac OS X. Error completo - vea la pregunta editada –

Respuesta

0

he hecho esto de esta manera:

$.get("http://<?php echo $_SERVER['HTTP_HOST']; ?>/_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { (...) 

Ustedes son los mejores. Gracias.

2

Su respuesta está en el mensaje de error:

XMLHttpRequest cannot load 
http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something. 
Origin http://asking1.com is not allowed by Access-Control-Allow-Origin.

http://www.asking1.com y http://asking1.comson diferentes orígenes, y por lo que este cae en conflicto con la política del mismo origen. Vea el sexto ejemplo here.

Si el código es realmente como se cita, con la dirección URL relativa, que no debería estar sucediendo, porque desde el mensaje de error el documento está en http://asking1.com, por lo que la ruta relativa resolvería a http://askign1.com/_x_fc.php, que estaría bien.

Si su código tiene una ruta de acceso absoluta, ese es su problema. Solo elimínalo para que se vea como el código entre comillas.

Si su código realmente tiene la ruta relativa, necesitará profundizar un poco en las cosas. Algo, en alguna parte, hace que el navegador piense que la solicitud del contenido www.asking1.com proviene del asking1.com.

+0

Pero eso solo sería un problema, si el OP estuviera estableciendo una ruta absoluta para la llamada '$ .get', donde ya que están configurando una ruta relativa, en cuyo caso, el dominio real nunca sería diferente a menos que hubiera un archivo .htaccess redirigiendo la solicitud. – Gavin

+0

@Gavin: Es cierto, suponiendo que el código entrecomillado sea preciso (lamentablemente, con frecuencia he visto código editado para hacerlo más corto y que corrige el error). De todos modos, el mensaje de error es claro de que es un SOP. –

2

www es técnicamente un subdominio. Por lo tanto, infringe el same-origin policy. Se podría resolver esto mediante el establecimiento

function _fc() { 
    document.domain = "www.asking1.com"; 
    $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { 

     if (data=='0') { letItGo=true; $('#loginform').submit(); } 
     else ...//Do some other checks 
    }); 
} 

o usted podría calificar totalmente su dirección URL que está de paso como parte de su solicitud AJAX para asegurarse de que es el mismo.

+0

Lo intentaré. –

Cuestiones relacionadas