2010-01-13 15 views
10

Perché il seguente codice Based on Mozilla example non funziona? Provato con Firefox 3.5.7 & Chrome.XMLHttpRequest per ottenere risposta HTTP dall'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> 

prega che il browser sta tirando il codice HTML dal disco locale (file: /// C: /Users/Maxim%20Veksler/Desktop/XMLHTTP.html)

Su Firefox dà il seguente errore :

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] 

Cosa sto facendo male? Voglio inviare una richiesta all'host remoto e avvisare il risultato (in seguito aggiunto in un div).

risposta

11

Il tuo browser impedisce cross-site scripting. Devi usare un percorso relativo, altrimenti la maggior parte dei browser restituirà semplicemente un errore o una risposta vuota.

Il seguente post Stack Overflow è probabilmente anche legato al vostro problema:

+0

OK, così come fa l'integrazione JavaScript di Google Analytics funziona codice? –

+1

@Maxim: potresti voler controllare questo post SO: ** In che modo google analytics raccoglie i suoi dati? **: http://stackoverflow.com/questions/892049/how-does-google-analytics-collect-its -dati –

0

Problema di sicurezza no?

Presumibilmente firefox impedisce al file locale di comunicare con un host remoto?

Scouting intorno alla rete - trovato questo. Provate ad aggiungere questo per l'inizio del vostro script:

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

non può garantire questo sarà il lavoro; perché in definitiva ciò che stai cercando di fare è inserire un buco di sicurezza che i browser sono stati codificati in modo specifico per essere collegati (richieste cross-domain).

Ci sono alcuni scenari speciali in cui può essere acceso, tuttavia, di solito a discrezione dell'utente.

3

Suppongo anche che tu abbia aperto la pagina di test HTML direttamente nel browser a giudicare dal tuo riferimento a file:///.... Per le chiamate XMLHttpRequest, è necessario pubblicare l'HTML da un server. Prova qualcosa come xampp (http://www.apachefriends.org/en/xampp.html) per ottenere un server locale attivo e funzionante, quindi esegui il test da http://localhost/XMLHTTP.html.

Nota, questo non risolve il problema same-origin, ma ciò permetterebbe il seguente codice al lavoro:

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