2010-02-10 13 views
29

sto ottenendo questo erroreNETWORK_ERROR: XMLHttpRequest Eccezione 101

NETWORK_ERROR: XMLHttpRequest Exception 101

quando si cerca di ottenere il contenuto XML da un sito. Ecco il mio codice

var xmlhttp; 
if(window.XMLHttpRequest) 
     { 
      xmlhttp = new XMLHttpRequest(); 
     } 
     if (xmlhttp==null) 
     { 
      alert ("Your browser does not support XMLHTTP!"); 
      return; 
     }   

xmlhttp.onReadyStateChange=function() 
     { 
       if(xmlhttp.readyState==4) 
       { 
       var value =xmlhttp.responseXML; 
       alert(value); 
       } 
     } 
     xmlhttp.open("GET",url,false); 
     xmlhttp.send(); 
     //alert(xmlhttp.responseXML);  
    } 
xmlhttp.open("GET",url,false); 
xmlhttp.send(null); 

Qualcuno ha una soluzione?

+0

questo sembra un problema di dominio croce –

+0

Si prega di parlare di quello del browser e/o piattaforma si vede il problema (ho ottenuto l'eccezione su Android 2.3.7 con WebKit 533,1 – Ribo

risposta

2

Qualcosa di simile è successo con me quando ho restituito un XML non corretto (ho inserito un attributo nel nodo radice). Nel caso in cui questo aiuti qualcuno.

+3

Come è un attributo nel nodo radice xml errato? – devios1

23

Se lo url fornito si trova esternamente al server e il server non ha consentito di inviare richieste, si verificano problemi di autorizzazione. Non è possibile accedere ai dati da un altro server con un XMLHttpRequest, senza il server che consente esplicitamente di farlo.

Aggiornamento: Rendendosi conto che questo è ora visibile come risposta su Google, ho cercato di trovare della documentazione su questo errore. È stato sorprendentemente difficile.

This article tuttavia, ha alcune informazioni di background e passaggi da risolvere. In particolare, si parla di questo errore qui:

As long as the server is configured to allow requests from your web application's origin, XMLHttpRequest will work. Otherwise, an INVALID_ACCESS_ERR exception is thrown

Un'interpretazione INVALID_ACCESS_ERR sembra essere quello che stiamo guardando qui.

Per risolvere questo problema, il server che riceve la richiesta deve essere configurato per consentire l'origine. Questo è descritto in more details at Mozilla.

+0

[Questo post] è un collegamento morto –

+1

Grazie! Il collegamento morto rimosso. –

+0

Gli URL che si trovano su un altro dominio/sito non sono necessariamente un problema di autorizzazione. fatto usando XMLHttpRequest se il server di destinazione lo permette – Ribo

4

La restrizione che non è possibile accedere ai dati da un altro server con XMLHttpRequest può essere applicata anche se l'url implica solo un server remoto.

Quindi: url = "http://www.myserver.com/webpage.html"

potrebbe non riuscire,

ma: url = "/webpage.html"

riescono - anche se la richiesta viene effettuata dal www.myserver.com

+0

XMLHttpRequest può essere utilizzato per accedere ai dati da altri server se il server di destinazione lo consente (anni fa non poteva). – Ribo

1

ho trovato un articolo molto bello con 2 soluti diferent ons.

  1. Il primo che implementa jQuery e JSONP, che spiega come sia semplice.
  2. Il secondo approccio, è il reindirizzamento attraverso una chiamata PHP. Molto semplice e molto bello.

http://mayten.com.ar/blog/42-ajax-cross-domain

0

Un altro metodo moderno per risolvere questo problema è cross Origine Ressource condivisione. HTML5 offre questa funzionalità. Puoi "avvolgere" la tua richiesta XMLhttp in questo CORS_request e se il browser di destinazione supporta questa funzione, puoi usarla e non avrai problemi.

MODIFICA: Additionaly devo aggiungere che ci sono molte ragioni che possono causare questo problema. Non solo una restrizione per il dominio incrociato, ma anche semplicemente le impostazioni errate nel tuo WEB.CONFIG del tuo servizio web.

Esempio IIS (NET):

Per abilitare l'accesso HTTP da fonti esterne (nel mio caso un'applicazione PhoneGap compilato con richiesta CORS) si deve aggiungere questo al vostro web.config

<webServices> 
     <protocols> 
      <add name="HttpGet"/> 
      <add name="HttpPost"/> 
     </protocols> 
    </webServices> 

Un altro scenario:

Ho due servizi Web in esecuzione ... Uno su Port 80 e uno su Port 90. Questo mi ha dato anche un errore di richiesta HTTP XML. Non so nemmeno perché :) Tuttavia penso che questo possa aiutare molti lettori non esperti.

2

Richiesta interrotta perché memorizzata nella cache o richiesta in precedenza? Sembra che l'errore XMLHttpRequest Exception 101 possa essere generato per diversi motivi. Ho scoperto che si verifica quando invio un XMLHttpRequest con lo stesso URL più di una volta. (La modifica dell'URL aggiungendo una stringa senza senso alla fine dell'URL consente di ripetere la richiesta. - Non intendevo ripetere la richiesta, ma gli eventi nel programma hanno causato che si verificasse e ha provocato questa eccezione).

Non restituire la risposta corretta. Testo o responseXML in caso di richiesta ripetuta è un bug (probabilmente webKit).

Quando si è verificata questa eccezione, ho ottenuto un evento onload con readyState == 4 e lo stato dell'oggetto request = 0 e responseText == "" e responseXML == null. Questa era una richiesta di dominio incrociato, che il server consente.

Questo è stato su un sistema Android 2.3.5 che utilizza WebKit/533,1

Qualcuno ha documentazione su ciò che si suppone l'eccezione nel senso?

1
xmlhttp.open("GET",url, true); 

impostare la parte asincrona su true