Więc chcesz wywołać wywołania Ajax do serwletu? Do tego potrzebny jest obiekt XMLHttpRequest
w języku JavaScript. Oto przykład zgodny z Firefoksem:
<script>
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
var data = xhr.responseText;
alert(data);
}
}
xhr.open('GET', 'myservlet', true);
xhr.send(null);
</script>
Jest to jednak bardzo szczegółowe i niezbyt kompatybilne z crossbrowserami. Aby uzyskać najlepszy sposób porównywania zapytań ajaxowych i przechodzenia przez drzewo DOM HTML, polecam pobrać jQuery. Oto przepisać powyższe w jQuery:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$.get('myservlet', function(data) {
alert(data);
});
</script>
Tak czy inaczej, Servlet na serwerze powinien być odwzorowany na url-pattern
z /myservlet
(można to zmienić do smaku) i mają co najmniej doGet()
wdrożony i napisać dane z odpowiedzią, co następuje:
String data = "Hello World!";
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(data);
ten powinien pokazać Hello World!
we wpisie JavaScript.
Można też oczywiście użyć doPost()
, ale wtedy trzeba zastosować 'POST'
w xhr.open()
lub użyj $.post()
zamiast $.get()
w jQuery.
Następnie, aby pokazać dane na stronie HTML, musisz manipulować HTML DOM.Na przykład, masz
<div id="data"></div>
w HTML, gdzie chcesz, aby wyświetlić dane odpowiedzi, to można to zrobić zamiast alert(data)
z 1. przykład:
document.getElementById("data").firstChild.nodeValue = data;
W jQuery przykładem może to zrobić w bardziej zwięzły i miły sposób:
$('#data').text(data);
aby dodatkowo przejść kilka kroków, które chcesz mieć łatwy dostępnym formacie dane do przelewu bardziej złożonych danych. Typowymi formatami są XML i JSON. Ten ostatni jest najbardziej preferowany, ponieważ jest bardziej zwięzły i może być używany w Javie i JavaScriptie w bardzo prosty sposób. W Javie można użyć Google Gson do konwersji pełnych obiektów Java na JSON i odwrotnie.
List<Product> products = productDAO.list(); // Product is just a Javabean with properties `id`, `name` and `description`.
String json = new Gson().toJson(products);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
W JavaScript można użyć jQuery $.getJSON()
aby ją "natychmiast". Wyświetlmy to w <table>
.
$.getJSON('myservlet', function(data) {
var table = $('<table>').appendTo($('#data'));
$.each(data, function(i, product) {
var row = $('<tr>').appendTo(table);
$('<td>').text(product.id).appendTo(row);
$('<td>').text(product.name).appendTo(row);
$('<td>').text(product.description).appendTo(row);
});
});
Zobacz także:
Zrobiłem to, co powiedziałeś. Ale serwlet zwraca kod html, który jest w nim jako odpowiedź. alert (dane) pokazuje kod html w ostrzeżeniu przeglądarki – Abhi
używając 'POST' zamiast' GET'. – Abhi