2009-12-14 7 views
7

Mein Problem in AJAX Handhabung: ich in einer JSP eine Anforderung an ein Servlet von einer AJAX-Funktion sende.Servlet Ausgabe

Das Servlet verarbeitet die Daten und gibt einen ArrayList.

Meine Frage ist, wie die ArrayList innerhalb AJAX zu handhaben, und es als eine Tabelle in derselben JSP angezeigt werden soll.

Der Code ist

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"); 


      } 
    } 
} 

Antwort

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

Erstens würde ich empfehlen Ihnen über die Mauer zwischen JavaScript und JSP zu lernen. JS läuft vollständig auf der Client-Seite und JSP/Java läuft vollständig auf der Server-Seite . Sie laufen sicher nicht synchron, wie Sie zu denken scheinen. Um mehr zu erfahren, lesen Sie this blog article.

function ajaxFunction () 

Zweitens würde ich Ihnen empfehlen, eine vorhandene, robust, gut ausgebaute und gepflegte JavaScript-Bibliothek mit Ajaxical Funktionen wie jQuery statt neu zu erfinden das AJAX Rad und Kämpfe zu verwenden/kämpfen/Sorgen mit browserspezifischen Problemen/Problemen/Verhalten/Schmerzen. Ich würde auch empfehlen, JSON als Datenübertragungsformat zwischen Java Servlet am Server und JavaScript am Client zu verwenden. Auf der Java-Seite können Sie hierfür die große Gson-Bibliothek verwenden.

Hier ist ein Kick-off Beispiel mit allen genannten Techniken. Beginnen wir mit einer Servlet starten und eine 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. 
} 

Die JsonServlet (nennen Sie es können, was Sie wollen, ist dies nur ein einfaches Beispiel) sollten in web.xml auf einem bekannten url-pattern abgebildet werden, lassen Sie uns /json in diesem Beispiel verwenden . Die Klasse Data repräsentiert nur eine Zeile Ihrer HTML-Tabelle (und der Datenbanktabelle).

Jetzt ist hier, wie Sie eine Tabelle mit Hilfe von jQuery.getJSON laden kann:

$.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)); 
    }); 
}); 

Die tableid natürlich die id des betreffenden <table> Element bezeichnet.

, dass es sein sollte. Schließlich ist es ziemlich einfach, glaube mir. Viel Glück.

+0

danke Mr.BalusC, ich schätze es. Ich bin gerade in dieses Projekt eingepfercht, da keine anderen Alternativen in meiner Firma verfügbar sind :-), im Grunde habe ich eine lange Verbindung mit MS Jungs. also finde ich es ein bisschen schwierig zu adoptieren, auf irgendeine Weise werde ich das als eine Vorspeise nehmen, um es noch einmal zu lernen. – sansknwoledge

+2

Mr.BalusC ist ziemlich gut. – Randnum