2010-01-13 10 views
10

¿Por qué el siguiente código Based on Mozilla example no funciona? Intentó con Firefox 3.5.7 & Chrome.XMLHttpRequest para obtener la respuesta HTTP del host remoto

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
</head> 
<body> 
</body> 
    <script> 
    var req = new XMLHttpRequest(); 
    req.open('GET', 'http://www.mozilla.org/', false); 
    req.send(); 
    if(req.status == 200) { 
     alert(req.responseText); 
    } 
    </script> 
</html> 

favor de que el navegador está tirando el html desde un disco local (file: /// C: /Users/Maxim%20Veksler/Desktop/XMLHTTP.html)

En Firefox se da el siguiente error :

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html :: <TOP_LEVEL> :: line 10" data: no] 

¿Qué estoy haciendo mal? Deseo enviar una solicitud al host remoto y alertar el resultado (más tarde para agregarlo a un div).

Respuesta

11

Su navegador está impidiendo cross-site scripting. Debe usar una ruta relativa, de lo contrario, la mayoría de los navegadores simplemente devolverán un error o un texto de respuesta vacío.

El siguiente post desbordamiento de pila es, probablemente, también relacionado con su problema:

+0

bien, así que ¿cómo lo hace la integración JavaScript de Google Analytics funciona código? –

+1

@Maxim: le recomendamos que consulte esta publicación SO: ** ¿Cómo recopila Google Analytics sus datos? **: http://stackoverflow.com/questions/892049/how-does-google-analytics-collect-its -datos –

0

Problema de seguridad no?

¿Presumiblemente firefox impide que el archivo local hable con un host remoto?

Exploración de la red: esto. Intente agregar esto al comienzo de su secuencia de comandos:

try { 
    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); 
} catch (e) { 
    alert("Permission UniversalBrowserRead denied."); 
} 

No se puede garantizar que esto funcione; porque, en última instancia, lo que intenta hacer es introducir un agujero de seguridad que los navegadores hayan codificado específicamente para que se hayan tapado (solicitudes entre dominios).

Existen algunos escenarios especiales en los que, sin embargo, se puede encender, generalmente a discreción del usuario.

3

También estoy asumiendo que ha abierto su página de prueba HTML directamente en el navegador a juzgar por su referencia al file:///.... Para llamadas XMLHttpRequest, debe servir el HTML desde un servidor. Pruebe algo como xampp (http://www.apachefriends.org/en/xampp.html) para iniciar y ejecutar un servidor local y luego ejecute la prueba desde http://localhost/XMLHTTP.html.

Nota, esto no resuelve su problema de mismo origen, pero esto permitiría el siguiente código para trabajar:

<script> 
    var req = new XMLHttpRequest(); 
    req.open('GET', '/myTestResponse.html', false); 
    req.send(); 
    if(req.status == 200) { 
     alert(req.responseText); 
    } 
    </script> 
Cuestiones relacionadas