2010-03-09 15 views
8

Acabo de comenzar a aprender jQuery y AJAX. Puedo cargar una página local (en mi disco) en un div a través de jQuery.load(), pero los sitios externos no parecen funcionar. Incluso he usado wireshark para verificar si los datos se envían desde el servidor (es). El código de muestra está a continuación:¿Puedo cargar datos desde una página externa a través de AJAX?

<html> 
<head> 
    <script src='jquery-1.4.2.min.js'></script> 
    <script> 
     $(document).ready(function() { 
      // $('#test').load('localpage.htm'); works! 
      $('#test').load('http://www.google.com/'); // does not work! 
     }); 
    </script> 
</head> 
<body> 
<div id='test'></div> 
</body> 
</html> 

¿Es posible hacer esto en primer lugar? ¿Si es así, cómo?

+0

pregunta similar con la respuesta http://stackoverflow.com/questions/ 2217695/trying-to-use-json-with-jquery/2217707 # 2217707 – yanoo

Respuesta

0

No puede llamar a Ajax desde otro dominio. Compruebe la técnica JSON para este

+0

JSON no te ayudará aquí, ya que es solo un formato para hacer, por ejemplo ajax llama.Misma política de origen ataca aquí también. –

+0

Podría estarse refiriendo a JSONP. – SLaks

2

Se está ejecutando en el Same Origin Policy. No puede acceder a los datos de un dominio externo utilizando AJAX, se considera un riesgo de seguridad. El razonamiento detrás de esto es que las solicitudes AJAX funcionan con las cookies almacenadas por el navegador: si traté de acceder a facebook.com, y usted inició sesión allí, se enviaría la cookie y tendría acceso a sus datos personales.

2

Por razones de seguridad, no puede usar AJAX para solicitar una página de un dominio diferente (o protocolo o puerto).

En su lugar, puede escribir una secuencia de comandos del lado del servidor en su servidor para reenviar solicitudes a otro dominio. (Esto no es posible si está ejecutando una página desde una url file://)

+0

No estoy seguro de si se refería a la redirección HTTP o al proxy 'para reenviar solicitudes a otro dominio'; la primera no funcionaría, pero el reenvío no sería el término correcto para la segunda. –

+0

@Andy: Quise decir proxying. ¿Cuál es el verbo correcto? – SLaks

+0

lo siento, solo estoy siendo exigente cuando realmente no hay necesidad (¿estrés del trabajo, tal vez? ;-)). Supongo que el reenvío podría usarse como un término, pero me acabó de leer mal y casi lo rechazo ;-) –

4

No puede hacer llamadas ajax a un dominio diferente del que se origina la secuencia de comandos.

Para hacer tal cosa, usted tiene que utilizar una página proxy en su propia página, por ejemplo:

<script> 
    $(document).ready(function() { 
     $('#test').load('ajax/getgoogle.php'); 
    }); 
</script> 

getgoogle.php:

<?php 

echo file_get_contents("http://www.google.com/"); 

?> 
2

Ajax? Sí. XHR? No (a menos que el navegador implemente Cross-site XHR que aún no está muy extendido).

Para obtener los datos con Ajax sin usar XHR, el sitio externo debe proporcionar los datos en el JSONP format.

Como alternativa, puede realizar un proxy de los datos a través de un script del lado del servidor en su servidor, haciendo que provenga del mismo host (en lo que concierne a JavaScript).

2

No, no lo es. Eche un vistazo al Same Origin Policy. El sitio que está intentando solicitar debería tener JSONP habilitado para que funcione, y utilizaría un cross-domain callback. Alternativamente, podría crear un proxy en su propio dominio que tome la página en nombre de su solicitud de ajax.

1

de carga de este script PHP en lugar de intentar cargar sitio web directamente

$filename = "http://www.sitename.com"; 
$handle = fopen($filename, "r"); 
if ($handle) 
{ 
    while (!feof($handle)) 
    { 
     $text .= fread($handle, 128); 
    } 
    fclose($handle); 
} 
print $text; 

Editar: O, simplemente, como solución de hombre de confianza con file_get_contents

+0

Utilice cURL con preferencia para fopen: http://stackoverflow.com/questions/636678/what-are-the-important-differences-between-using-fopenurl-and-curl-in-php/637693 – Quentin

Cuestiones relacionadas