2010-12-12 5 views
0

J'ai rencontré un problème lors de l'utilisation de servlet avec jquery ajax. Lorsque je mets le fichier html qui contient le code js dans le même projet avec le servlet, cela fonctionnera. Cependant, quand j'ai utilisé ce code HTML sur une autre machine et utilisé l'URL: http://192.168.1.5:8084/****/Servlet pour l'ajax, je n'ai rien pu obtenir.jquery ajax avec servlet

$.ajax({ 
    url:'http://192.168.1.5:8084/****/Servlet', 
    data: ajaxdata, 
    type:'GET', 
    dataType:'text/html', 
    //contentType: "text/html", 
    success:function(json) { } 
}); 

Alors des idées? Merci.

Répondre

0

! Puzzle

ce que l'on appelle même problème de politique d'origine ajax, il fonctionnera si les deux sont sur le même serveur.

lire ce lien, sa très belle

Ways to circumvent the same-origin policy

http://www.petefreitag.com/item/703.cfm 

recherche dans la pile de flux sur vous obtiendrez beaucoup de réponses

+0

Oh. Merci beaucoup. Dois-je utiliser un vrai service web au lieu de servlet pour réaliser des choses comme ça? Par exemple, vous pouvez obtenir des données à partir d'une URL de service Web – jigsaw

+0

que je comprends. il s'agit d'ajax pas de service. Ajax a cette politique "même origine". Mais je peux toujours accéder à une servlet pour obtenir des données dont j'ai besoin. – jigsaw

0

Vous ne pouvez pas utiliser AJAX pour envoyer une demande à un autre site .

0

Cela est dû au fait que vous effectuez un ajax interdomaine. Les navigateurs ont tendance à interdire cela, car c'est un problème de sécurité.

Voir here et here.

(De toute évidence, vous n'aurez pas de problèmes quand ils sont sur le même serveur)

3

Si vous avez le contrôle sur le servlet, définissez les HTTP Access-Control têtes. De cette façon, vous pouvez contrôler du côté serveur si le client qui a déclenché XMLHttpRequest est autorisé à traiter la réponse. Tout navigateur web récent (et décent) agira en conséquence.

Voici un exemple:

response.setHeader("Access-Control-Allow-Origin", "*"); // Everone may process the response. 
response.setHeader("Access-Control-Allow-Methods", "GET"); // Commaseparated string of allowed request methods. 

Une alternative est JSONP, vous pouvez aussi consulter this article.