2010-02-08 11 views
21

Mam mały problem z ajaxem związany z krzyżową domeną, ponieważ ją widzę.Problem ze słownikiem - 200 OK w firebug, ale czerwona wiadomość bez treści odpowiedzi

Na localmachine utworzonego przykład HTML z niektórych AJAX: w polu tekstowym rejestracji użytkownik wpisze „username”, na każdym klawiszu ajax wysyła go do lokalnej Tomcat, gdzie sprawdza serwletów czy ta nazwa użytkownika jest już używany i wysyła " wziął odpowiedź "Reponse".

Nie ma problemu na localhost w ogóle. Gdy tylko wpiszę nazwę używanego "username", serwlet wysyła "podjętą" odpowiedź , a przeglądarka wyświetla ją.

Ale kiedy kładę testową stronę html z ajax na zdalnym komputerze (jakiś darmowy hosting na sieci zdalnej) który wysyła żądanie weryfikacji na moim localhost Tomcat, połączenia, w konsoli Tomcat widzę żądania nadchodzi, i Firebug w Mozzila to jest konsola ouput:

GET http://89.216.182.25:8080/Dinamicki1/UsernameServlet?username=zik 200 OK 

... ale w karcie odpowiedzi nie ma aplet odpowiedź „wzięty” i wiadomości w Firebug jest w kolorze czerwonym

Więc serwery komunikują się dobrze, nie ma problemów z zaporą ogniową, odpowiedź jest 200 OK
Ale treść odpowiedzi jest pusta.

Jakieś pomysły na temat tego, czym są te czerwone wiadomości w firebugach?

Dziękuję bardzo z góry.

A jeśli ktoś może polecić jakieś poważne samouczek AJAX dla Javy to będzie wysoko ceniona :)

Odpowiedz

17

Musisz użyć adresu URL domeny względne w swoim wniosku Ajax:

/Dinamicki1/UsernameServlet?username=zik

lub adres URL kontekstowego względne (zakładając, że strona jest serwowane /Dinamicki1):

UsernameServlet?username=zik

W odniesieniu do "Samouczka Ajax dla Javy", tak naprawdę nie ma takiego. To tylko dwie oddzielne technologie. Jednak polecam zacząć od jQuery (po stronie klienta) i Google Gson (po stronie serwera) i JSON (jako język komunikacji między klientem a serwerem).

+0

@BalusC Chyba używając domenie względny adres URL nie będzie mi pomóc jeśli html z ajax polega na tym darmowe domeny i hostingu serwletu, która jest wywoływana z ajax jest jeszcze na moim komputerze lokalnym? Więc albo używam tego rozwiązania proxy lub przenosimy mój servlett na tej samej maszynie, gdzie html i ajax jest? – reg

+2

Nie można uruchamiać żądań Ajax w wielu domenach. Z pewnością zarówno źródło jak i cel ajax powinny znajdować się w tej samej domenie. URL w domenie jest najłatwiejszym sposobem na zapewnienie tego i wykrycie potencjalnych błędów. Serwlet proxy za pomocą 'java.net.URLConnection' może rzeczywiście rozwiązać twój problem. Lepiej byłoby nadal gościć wszystkich na tej samej maszynie. – BalusC

+0

Później napisałem obszerną odpowiedź, jak używać serwletów i ajaxów. Może być pomocny jako rodzaj samouczka: [Jak korzystać z serwletów i Ajax?] (Http://stackoverflow.com/questions/4112686/how-to-use-servlets-and-ajax) – BalusC

5

Nie można używać AJAX czytać odpowiedzi od innych domen.

Twój HTML musi znajdować się na tym samym serwerze (i tej samej domenie, porcie i protokole) co serwlet AJAX.

1

zorientowali się, jak go rozwiązać od this site „W pliku conf/web.xml z false na true«

  1. »Aby umożliwić przeglądanie katalogów poprzez Apache Tomcat zmienić parametr” aukcji

  2. Zadzwoń na swoją stronę jako C:/Documents and Settings/.../page.html, ale jako localhost:8080/your_servlet_name (strona jest lepiej nazwana index.html).

W ten sposób można przesyłać żądania AJAX pod numer localhost:8080/your_servlet_name/something_else.

0

Rozwiązaniem, które zadziałało, było to, że musiałem dodać "www" do adresu URL! Używałem URL Rewrite, więc każdy adres URL, który miałem (obraz, js, get, load, post), musiałem użyć pełnego adresu URL, ale brakowało "www"!

0

Dla mnie to żądanie sieci web (C# .NET) i cors nie zostało włączone. Dodano nagłówek dla cors na kontrolerze i to rozwiązało problem.

[EnableCors(origins: "*", headers: "*", methods: "*")] 
Powiązane problemy