2009-12-14 18 views
7

Mi problema: estoy enviando una solicitud a un servlet desde una función AJAX en un JSP.Manejo de salida de servlet en AJAX

El servlet procesa los datos y devuelve un ArrayList.

Mi pregunta es cómo manejar el ArrayList dentro de AJAX, y mostrarlo como una tabla en el mismo JSP.

El código es

function ajaxFunction () { 

// var url= codeid.options[codeid.selectedIndex].text; 
url="mstParts?caseNo=9&cdid=QCYST0020E1"; 
// alert(cid); 
    var httpRequest; 
    if (window.XMLHttpRequest) { 
     httpRequest = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    if (httpRequest == null){ alert('null');} 

alert(url); 
    httpRequest.open("GET", url, true); 

    httpRequest.onreadystatechange = function() { alertContents(httpRequest); }; 
    //httpRequest.setRequestHeader('Content-Type', 'text/plain'); 
    httpRequest.send(null); 

    alert('t1'); 
} 

function alertContents(httpRequest) { 
    if (httpRequest.readyState == 4) { 
     var cType =httpRequest.getResponseHeader("Content-Type"); 
     //document.write(httpRequest.toString()); 
     // alert(cType); 
     // var xmlDoc=httpRequest.responseText; 
     //document.write(xmlDoc.toString()); 
     // if (xmlDoc == null) {alert('null returned');} 
     if (!httpRequest.status == 200) { 
      alert('Request error. Http code: ' + httpRequest.status); 
     } 
     else 
      { 
       var profileXML = eval(<%=request.getAttribute("data")%>); 
       if (profileXML != null){ alert('null'); }//else { alert(profileXML(0)); } 
       // httpRequest.getAttribute("data"); 


      } 
    } 
} 

Respuesta

19
var profileXML = eval(<%=request.getAttribute("data")%>); 

En primer lugar, le recomiendo que se informe de la pared entre JavaScript y JSP. JS se ejecuta completamente en el lado del cliente y JSP/Java se ejecuta completamente en el lado del servidor . Ciertamente no se ejecutan en sincronía, como parece pensar. Para obtener más información, lea this blog article.

function ajaxFunction () 

En segundo lugar, yo le recomendaría utilizar un robusto desarrollado minuciosamente-biblioteca existente,,, bien mantenido JavaScript con capacidades Ajaxical como jQuery en lugar de reinventar la rueda AJAX y la lucha/lucha/Preocuparse con problemas/problemas/conductas/dolores específicos del navegador. También recomendaría usar JSON como formato de transferencia de datos entre Java Servlet en el servidor y JavaScript en el cliente. En el lado de Java, puede usar la gran biblioteca Gson para esto.

Aquí hay un ejemplo de inicio con todas las técnicas mencionadas. Vamos a empezar con un servlet y un JavaBean:

public class JsonServlet extends HttpServlet { 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     List<Data> list = dataDAO.list(); 
     response.setContentType("application/json"); 
     response.setCharacterEncoding("UTF-8"); 
     response.getWriter().write(new Gson().toJson(list)); 
    } 
} 

public class Data { 
    private Long id; 
    private String name; 
    private Integer value; 
    // Add/generate getters/setters. 
} 

El JsonServlet (que puede nombrar como quiera, esto es sólo un ejemplo básico) debe ser asignada en web.xml en un conocido url-pattern, vamos a usar /json en este ejemplo . La clase Data solo representa una fila de su tabla HTML (y la tabla de la base de datos).

Ahora, aquí es cómo se puede cargar una tabla con la ayuda de jQuery.getJSON:

$.getJSON("http://example.com/json", function(list) { 
    var table = $('#tableid'); 
    $.each(list, function(index, data) { 
     $('<tr>').appendTo(table) 
      .append($('<td>').text(data.id)) 
      .append($('<td>').text(data.name)) 
      .append($('<td>').text(data.value)); 
    }); 
}); 

El tableid, por supuesto, denota el id del elemento <table> en cuestión.

Eso debería ser. Después de todo, es bastante simple, créanme. Buena suerte.

+0

gracias Mr.BalusC, lo agradezco. Estoy encajonado en este proyecto, ya que no hay otras alternativas disponibles en mi empresa :-), básicamente estoy teniendo una larga asociación con chicos de MS. así que me parece un poco difícil de adoptar, de cualquier manera tomaré esto como un comienzo para aprender. Gracias una vez más. – sansknwoledge

+2

Mr.BalusC es bastante bueno. – Randnum

Cuestiones relacionadas