2010-02-08 5 views
21

J'ai un petit problème ajax lié à cross domain comme je le vois.problème ajax - 200 OK dans firebug mais message rouge avec aucun corps de réponse

Sur localmachine j'ai créé exemple html avec quelques ajax: dans de nom d'utilisateur 'types de champs de texte d'enregistrement de l'utilisateur, sur chaque frappe ajax envoie à Tomcat local, où les contrôles de servlet si ce nom d'utilisateur est déjà utilisé et envoie' pris 'reponse retour.

Aucun problème sur localhost du tout. Dès que je tape 'servername', le servlet envoie la réponse 'taken' et le navigateur l'affiche.

Mais, quand je mets une page de test html avec ajax sur la machine distante (certains hébergement gratuit sur le réseau à distance) qui envoie la demande de validation sur mon localhost connexion Tomcat, est fait, dans la console Tomcat je vois comming demande, et firebug dans ce Mozzila est la console ouput:

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

... mais dans l'onglet réponse il n'y a pas de réponse servlet 'prise' et message dans firebug est en couleur rouge

Pour que les serveurs communiquent bien, aucun problème de pare-feu, la réponse est 200 OK
Mais le corps de la réponse est vide.

Des idées ce que sont ces messages rouges dans les firebugs?

Merci beaucoup à l'avance.

Et si quelqu'un peut recommander un tutoriel sérieux certains ajax pour java il sera très apprécié :)

Répondre

17

Vous devez utiliser un domaine relatif URL dans votre requête Ajax:

/Dinamicki1/UsernameServlet?username=zik

Ou une URL relatif au contexte (en supposant que la page est servi de /Dinamicki1):

UsernameServlet?username=zik

En ce qui concerne "Ajax tutorial for Java", il n'y en a vraiment pas. Ce ne sont que deux technologies distinctes. Je recommanderais toutefois de commencer par jQuery (côté client) et Google Gson (côté serveur) et JSON (en tant que langage de communication entre le client et le serveur).

+0

@BalusC Je suppose que l'aide URL de domaine par rapport ne me aidera pas si html avec ajax réside sur ce domaine d'hébergement gratuit et servlet qui est appelé à partir ajax est encore sur ma machine locale? Donc, soit je utilise cette solution proxy ou je déplace mon servlet sur la même machine où html et ajax est? – reg

+2

Vous ne pouvez pas déclencher de requêtes Ajax interdomaines. Certes, la source ajax et la cible doivent être sur le même domaine. Une URL relative au domaine est le moyen le plus simple d'assurer cela et d'identifier les bogues potentiels. Une servlet proxy utilisant 'java.net.URLConnection' peut en effet résoudre votre problème. Mieux serait encore d'héberger tous à la même machine. – BalusC

+0

J'ai plus tard écrit une réponse approfondie comment utiliser les servlets et ajax. Il peut être utile comme type de tutoriel: [Comment utiliser Servlets et Ajax?] (Http://stackoverflow.com/questions/4112686/how-to-use-servlets-and-ajax) – BalusC

5

Vous ne pouvez pas utiliser AJAX pour lire les réponses des autres domaines.

Votre HTML doit être sur le même serveur (et le même domaine, port et protocole) que le servlet AJAX.

1

Je compris comment résoudre de this site:

  1. "Pour permettre l'exploration des répertoires via Apache Tomcat changer les paramètres "listes" dans le fichier conf/web.xml de false à true." Appelez votre page pas comme C:/Documents and Settings/.../page.html mais comme localhost:8080/your_servlet_name (page est mieux nommé index.html).

De cette façon, vous serez en mesure de faire des requêtes AJAX à localhost:8080/your_servlet_name/something_else.

0

Une solution qui a fonctionné pour moi était que je devais ajouter "www" à l'URL! J'utilisais l'URL Rewrite, donc chaque URL que j'avais (image, js, get, load, post), j'avais besoin d'utiliser full url, mais il manquait "www"!

0

Pour moi, c'était une demande web api (C# .NET) et cors n'était pas activé. Ajout d'en-tête pour cors sur le contrôleur et il a résolu le problème.

[EnableCors(origins: "*", headers: "*", methods: "*")] 
Questions connexes