¿Desea disparar Ajax llamadas al servlet? Para eso necesita el objeto XMLHttpRequest
en JavaScript. Aquí hay un ejemplo compatible con Firefox:
<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>
Sin embargo, esto es muy detallado y no es compatible con crossbrowser. Para la mejor forma compatible de crossbrowser de disparar solicitudes ajaxical y atravesar el árbol HTML DOM, recomiendo tomar jQuery. Aquí está una reescritura de los anteriores en jQuery:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$.get('myservlet', function(data) {
alert(data);
});
</script>
De cualquier manera, el servlet en el servidor debe ser mapeada en una url-pattern
de /myservlet
(se puede cambiar esto a su gusto) y tener al menos doGet()
implementado y escribir el los datos de la respuesta de la siguiente manera:
String data = "Hello World!";
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(data);
Esto debería mostrar Hello World!
en la alerta de JavaScript.
Por supuesto, puede también utilizar doPost()
, pero se debe usar en 'POST'
xhr.open()
o utilizar en lugar de $.post()
$.get()
en jQuery.
Luego, para mostrar los datos en la página HTML, necesita manipular el HTML DOM.Por ejemplo, usted tiene un
<div id="data"></div>
en el HTML en el que desea mostrar los datos de respuesta, entonces puede hacerlo en lugar de alert(data)
de la primera ejemplo:
document.getElementById("data").firstChild.nodeValue = data;
En el jQuery ejemplo, usted podría hacer esto de una manera más concisa y agradable:
$('#data').text(data);
para ir algunos pasos más allá, que le gustaría tener un formato de datos de fácil acceso para la transferencia de datos más complejas. Los formatos comunes son XML y JSON. El último es el más preferido ya que es más conciso y se puede usar tanto en Java como en JavaScript de una manera muy sencilla. En Java, puede usar Google Gson para convertir objetos de Java completos en JSON y viceversa.
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);
En JavaScript se puede usar jQuery $.getJSON()
de conseguirlo "al instante". Vamos a mostrarlo en un <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);
});
});
Ver también:
Hice lo que dijiste. Pero el servlet devuelve el código html que está dentro de él como respuesta. la alerta (datos) muestra el código html en la alerta del navegador – Abhi
usando 'POST' en lugar de' GET' trabajado. – Abhi