2010-02-10 8 views
29

otrzymuję ten błądNETWORK_ERROR: XMLHttpRequest Wyjątek 101

NETWORK_ERROR: XMLHttpRequest Exception 101

gdy próbuje zawartości XML z jednego miejsca. Oto mój kod:

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); 

Czy ktoś ma rozwiązanie?

+0

to wygląda karne problemu domeny –

+0

Powołaj co przeglądarka i/lub platforma widzisz problem na (mam wyjątek na Androidzie 2.3.7 z WebKit 533,1 – Ribo

Odpowiedz

2

Coś podobnego stało się ze mną, gdy zwróciłem nieprawidłowy XML (umieszczam atrybut w głównym węźle). Jeśli to pomoże każdemu.

+3

W jaki sposób atrybut w węźle źródłowym jest niepoprawny xml? – devios1

23

Jeśli dostarczona przez Ciebie usługa url znajduje się na zewnątrz serwera, a serwer nie zezwala na wysyłanie żądań, masz problemy z uprawnieniami. Nie można uzyskać dostępu do danych z innego serwera za pomocą XMLHttpRequest, bez wyraźnego zezwolenia serwera na to.

Aktualizacja: Uświadamiając sobie, że jest to teraz widoczne jako odpowiedź w Google, próbowałem znaleźć dokumentację dotyczącą tego błędu. To było zaskakująco trudne.

This article ma jednak pewne podstawowe informacje i kroki do rozwiązania. Konkretnie, wymienia ten błąd tutaj:

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

Interpretacja INVALID_ACCESS_ERR wydaje się być to, czego szukasz w tutaj.

Aby rozwiązać ten problem, serwer, który otrzymuje żądanie, musi być skonfigurowany tak, aby zezwalać na pochodzenie. Jest to opisane w more details at Mozilla.

+0

[Ten wpis] jest martwym łączem –

+1

Dzięki! Dead link removed –

+0

URL-e znajdujące się w innej domenie/witrynie niekoniecznie stanowią problem z uprawnieniami. wykonane przy użyciu XMLHttpRequest, jeśli serwer docelowy na to zezwala – Ribo

4

Ograniczenie, że nie można uzyskać dostępu do danych z innego serwera przy pomocy XMLHttpRequest, może być stosowane, nawet jeśli adres URL oznacza tylko serwer zdalny.

Więc: url = "http://www.myserver.com/webpage.html"

może zawieść,

ale: url = "/webpage.html"

uda - nawet jeżeli wniosek jest wykonany z www.myserver.com

+0

XMLHttpRequest może być używany do uzyskiwania dostępu do danych z innych serwerów, jeśli serwer docelowy na to zezwala (lata temu nie mógł). – Ribo

1

znalazłem bardzo ciekawy artykuł z 2 Soluti zmierzających ons.

  1. Pierwsza implementująca jQuery i JSONP, wyjaśniająca, jakie to proste.
  2. Drugie podejście, to przekierowanie przez wywołanie PHP. Bardzo proste i bardzo ładne.

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

0

Kolejna nowoczesna metoda rozwiązania tego problemu jest Krzyż Pochodzenie Ressource Sharing. HTML5 oferuje tę funkcję. Możesz "zawinąć" żądanie XMLhttp w tym CORS_request i , jeśli przeglądarka docelowa obsługuje tę funkcję, możesz z niej korzystać i nie będziesz mieć problemów.

EDYCJA: Dodatkowo muszę dodać, że istnieje wiele przyczyn, które mogą powodować ten problem. Nie tylko ograniczenie w domenie krzyżowej, ale także po prostu błędne ustawienia w WEB.CONFIG swojego Webservice.

Przykład IIS (NET):

Aby umożliwić dostęp HTTP ze źródeł zewnętrznych (w moim przypadku to skompilowane app PhoneGap z prośbą Cors) trzeba dodać to do pliku web.config

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

Kolejny scenariusz:

Mam dwa serwisy internetowe działające ... Jeden na porcie 80 i jeden na porcie 90. Dało mi to również błąd żądania HTTP XML. Nawet nie wiem dlaczego :). Niemniej jednak myślę, że może to pomóc wielu nie do końca doświadczonym czytelnikom.

2

Żądanie zostało przerwane z powodu buforowania lub wcześniejszego żądania? Wygląda na to, że błąd XMLHttpRequest Exception 101 może zostać zgłoszony z kilku powodów:. Odkryłem, że występuje, gdy wysyłam XMLHttpRequest z tego samego adresu URL więcej niż jeden raz. (Zmiana adresu URL poprzez dodanie pamięci podręcznej, która pokonuje ciąg nonsensów na końcu adresu URL, umożliwia powtórzenie żądania, - nie miałem zamiaru powtarzać żądania, ale zdarzenia w programie spowodowały jego wystąpienie i spowodowały ten wyjątek).

Nie zwraca poprawnej odpowiedziTekst lub responseXML w przypadku powtarzającego się żądania to błąd (prawdopodobnie webKit).

Po wystąpieniu tego wyjątku otrzymałem zdarzenie onload z parametrem readyState == 4, a stan obiektu żądania = 0 i responseText == "" i responseXML == null. Było to żądanie między domenami, na które zezwala serwer.

To było na systemie Android 2.3.5, który wykorzystuje WebKit/533,1

Ktoś ma dokumentacji na co wyjątek ma znaczyć?

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

ustawić część asynchronicznej do prawdziwej

Powiązane problemy