AJAX

2009-12-14 10 views
7

में सर्वलेट आउटपुट हैंडलिंग मेरी समस्या: मैं एक जेएसपी में AJAX फ़ंक्शन से सर्वलेट को अनुरोध भेज रहा हूं।AJAX

सर्वलेट डेटा को संसाधित करता है और ArrayList देता है।

मेरा प्रश्न है कि AJAX के अंदर ArrayList को कैसे संभालें, और इसे उसी जेएसपी में एक तालिका के रूप में प्रदर्शित करें।

कोड

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


      } 
    } 
} 

उत्तर

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

सबसे पहले है, मैं जावास्क्रिप्ट और JSP के बीच दीवार के बारे में जानने के लिए आप की सिफारिश करेंगे। जेएस पूरी तरह से क्लाइंट साइड पर चलाता है और जेएसपी/जावा सर्वर पक्ष पर पूरी तरह से चलता है। जैसा कि आपको लगता है कि वे निश्चित रूप से सिंक में नहीं चलते हैं। और जानने के लिए, this blog article पढ़ें।

function ajaxFunction () 

दूसरे, मैं Ajaxical क्षमताओं ऐसे jQuery के रूप में/AJAX पहिया और लड़ाई पुनर्रचना संघर्ष के बजाय साथ एक मौजूदा, मजबूत, अच्छी तरह से विकसित, अच्छी तरह से बनाए JavaScript लाइब्रेरी का उपयोग करने की सलाह देंगे/ब्राउज़र विशिष्ट मुद्दों/परेशानियों/व्यवहार/दर्द के साथ चिंताजनक। मैं सर्वर पर जावा सर्लेट और क्लाइंट पर जावास्क्रिप्ट के बीच डेटा ट्रांसफर प्रारूप के रूप में JSON का उपयोग करने की भी सिफारिश करता हूं। जावा पक्ष में आप इसके लिए महान Gson लाइब्रेरी का उपयोग कर सकते हैं।

यहां उल्लिखित तकनीकों के साथ एक किकऑफ उदाहरण है। चलो एक सर्वलेट और एक 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. 
} 

JsonServlet एक ज्ञात url-pattern पर web.xml में मैप किया जाना चाहिए (आप इसे नाम हो सकता है जो कुछ भी आप चाहते हैं, यह सिर्फ एक बुनियादी उदाहरण है), के इस उदाहरण में /json का उपयोग करते हैं । कक्षा Data बस आपकी HTML तालिका (और डेटाबेस तालिका) की एक पंक्ति का प्रतिनिधित्व करता है।

अब, यहाँ कैसे आप 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)); 
    }); 
}); 

निश्चित रूप से tableid अर्थ है सवाल में <table> तत्व की id

यह होना चाहिए। आखिरकार यह काफी सरल है, मेरा विश्वास करो। सौभाग्य।

+0

धन्यवाद श्री बालुस, मैं इसकी सराहना करता हूं। मुझे बस इस परियोजना में शामिल किया गया है क्योंकि मेरी कंपनी में कोई अन्य विकल्प उपलब्ध नहीं है :-), मूल रूप से मैं एमएस लोगों के साथ एक लंबा सहयोग कर रहा हूं। तो मुझे इसे अपनाने में थोड़ा मुश्किल लगता है, किसी भी तरह से मैं इसे सीखने के लिए स्टार्टर के रूप में ले जाऊंगा। एक बार फिर धन्यवाद। – sansknwoledge

+2

श्री बालुससी बहुत अच्छा है। – Randnum

 संबंधित मुद्दे