2013-08-24 13 views
7

Jestem niedoświadczony w javascript i rozwoju sieci w ogóle. Projekt, nad którym pracuję, jest częścią ogólnego programu szkoleniowego dla firm. Zostaliśmy poproszeni o używanie przeglądarki Google Chrome jako podstawowej przeglądarki testowej.JavaScript XMLHttpRequest "NetworkError"

Zasadniczo piszę aplikację, która będzie działać na klientach zewnętrznych do intranetu firmy. Połączenia przechodzą przez nasz pojedynczy znak na serwerze do wewnętrznych usług. Usługa pojedynczego logowania jest przeważnie przezroczysta dla aplikacji po stronie serwera - przechwytuje żądania do wewnętrznych usług i w razie potrzeby monituje o poświadczenia. Z tego, co wiem, zmienia plik cookie sesji podczas każdego wysłanego żądania.

Ustanowiłem połączenia z usługami za pomocą połączeń HTTP GET i POST. Istnieje jednak jedna usługa, która wymaga żądania HTTP PUT. To jest, gdy problem jest w najbliższych

Po uruchomieniu skryptu, Chrome JavaScript konsola daje następujący błąd:.

Uncaught NetworkError: A network error occurred. 

błąd jest tak niejasne. Kiedy patrzę na kartę Sieć na karcie programisty przeglądarki Chrome, pokazuje ona żądanie, ale nie ma żadnych danych odpowiedzi.

Dla ciekawości kliknąłem prawym przyciskiem myszy na żądanie i skopiowałem je jako żądanie cURL. Do wniosku dodałem plik cookie sesji za pomocą opcji -b. cURL zwraca HTTP 302, z odniesieniem do skryptu cookie make na serwerze. Będąc żądaniem PUT, czy żadne przekierowanie nie powoduje niepowodzenia żądania? Ale nie jestem pewien, co się dzieje w Chrome/js.

Czy istnieje sposób, w jaki mogę uzyskać więcej informacji na temat błędu?

Nie jestem w 100% pewny, że zespół opracował dla nas wewnętrzne usługi, więc korzystanie z żądania PUT może rzeczywiście być niemożliwe ... usługi są nadal w fazie rozwoju.

Aby było jasne, ogólny problem polega na tym, że potrzebuję tej prośby PUT, aby przejść przez naszą aplikację SSO, o ile jest to możliwe.

Odpowiedz

10

Wpadłem na ten sam problem. Wydaje się, że dzieje się tak tylko w przypadku odpowiedzi przekierowania. Jeśli ustawisz flagę asynchroniczną na false i użyjesz funkcji wywołania zwrotnego, błąd zniknie. Na przykład:

xmlhttp.open("GET","http://google.com", false); 

Następnie trzeba funkcję takiego słuchać na odpowiedź:

xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
    // do stuff here 
    } 
}