Je ne peux pas récupérer responseText de servlet utilisant AJAX
J'ai une servlet fichier appelé NewServlet.java
. Cette servlet est appelé par mon script AJAX pour récupérer la réponse.
J'ai vérifié la servlet par le tester dans un navigateur.
Mais quand je l'appelle de mon script AJAX, il me donne une vierge responseText
et un message d'erreur qui dit
XMLHttpRequest ne peut pas charger
http://localhost:8084/WebApplication1/NewServlet.
Origine null n'est pas autorisé par
Access-Control-Allow-Origin
NewServlet.java
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class NewServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<option value='1'>one</option>");
out.println("<option value='2'>two</option>");
out.println("<option value='3'>three</option>");
out.println("<option value='4'>four</option>");
out.println("<option value='5'>five</option>");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public String getServletInfo() {
return "Short description";
}
}
test.html
<html>
<head>
<script language = "javascript">
var xmlDoc = 0;
var xhttp = 0;
function reciveData()
{
if (window.XMLHttpRequest)
{
xhttp=new XMLHttpRequest();
}
else //IE 5/6
{
xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.onreadystatechange = redirectUser;
xhttp.open("GET","http://localhost:8084/WebApplication1/NewServlet",true);
xhttp.send();
}
function redirectUser()
{
if (xhttp.readyState == 4)
{
log = 0;
xmlDoc = xhttp.responseText;
alert(xmlDoc);
}
}
</script>
</head>
<body onload="reciveData()">
</body>
</html>
Peut quelqu'un me pointer dans la bonne direction ?
Grâce.
- en.wikipedia.org/wiki/XMLHttpRequest#Cross-domain_requests est le problème que vous rencontrez.
- Merci, c'était très utile.
Vous devez vous connecter pour publier un commentaire.
Que du côté navigateur...le modèle de sécurité autorise uniquement les requêtes AJAX sur le même hôte/port que vous avez récupéré la page de. Assurez-vous que vous avez récupéré de votre page via le serveur (par exemple,http://localhost:8084/test.html) et ne sont pas chargés par le système de fichiers. Ensuite, vous devriez être bon d'aller...ou au moins continuer de débogage. 😉
loaded it via the filesystem
? Comment puis-je vérifier si je ne suis pas le charger par le biais du système de fichiers?test.html
page doit être servi par un serveur sur le même domaine que le serveur vous faites l'appel AJAX pour. Donc suffit de mettre le .fichier html dans votre conteneur de servlet au lieu d'utiliser une copie locale du système de fichiers.Cela peut en effet se produire lorsque la servlet s'exécute sur un port différent de celui où la requête ajax est en venir. Cela viole le Même La Politique De L'Origine pour les requêtes ajax et donc le navigateur n'est pas du processus de la réponse ajax. En dehors de l'hébergement de la servlet derrière le port, d'autres solutions sont à retourner JSONP au lieu de laisser la servlet définir la HTTP
Contrôle d'Accès
en-têtes.Toutefois, vous devez garder à l'esprit que de cette façon, votre servlet est par Ajax accessible à tout le monde. Si le servlet renvoie des informations sensibles, alors c'est un trou de sécurité. Mais si elle ne le fait pas et c'est censé être un public webservice, il est sûr.
dans mon expérience, si vous voulez charger les données avec l'ajax, envoyer votre demande à un fichier jsp, et obtenir votre texte de la réponse à partir de ce fichier jsp. il est beaucoup plus facile de haendel. par exemple si vous aimez
==========================
ajax_load.js :
===========================
de la charge.jsp :
et de faire de l'ajax d'aller, vous avez juste besoin d'appeler le .js fonction de l'endroit où vous souhaitez, par exemple sur un bouton de action du clic :
onClick="loadAdminRight("article");"
et vous pouvez importer vos classes java dans un fichier jsp avec ajout <%page import="" %> en haut de votre page jsp par exemple :
<%@page import="com.omicc.des classes.L'Article"%>
écrire votre propre charge.fichier jsp qui gère la réponse, puis utiliser.écrire dans votre fichier jsp pour écrire le texte de la réponse.
je souhaite qu'il vous aide à