2009-09-22 36 views
0

我沒有太多的servlet經驗,我一直在圈圈尋找對我的問題的答案。所以是時候讓專家解答了! :)Javascript調用java Servlet並返回數據幫助

概述:我需要Javascript才能調用我的servlet並返回數據以更新窗體上的值。

我有一個在Glassfish V2.1中運行的名爲DBGet的java servlet,其目的是從mysql數據庫返回一串數據。編碼該部分沒有問題。

當我嘗試讓JavaScript訪問DBGet servlet時,我得到一個XML Response對象,我真的不知道如何解析以獲取數據。我甚至不確定這是否是最好的使用方法。所以我接受其他解決方案。

我在網上找到了這段代碼。並修改它與我所擁有的一起工作。

function ajaxLoad(logid) { 
var servlet = "DBGet";   //the name (URI) of the sevlet 
var arg = "logid=" + logid;  //attributes 
var req = servlet + "?" + arg; //compiling the request 

addrequest(req);       //calls the addrequest function 
request.onreadystatechange = function(){ //this is used to listen for changes in the request's status 
if(this.readyState == 2) { 
    //not sure what to do here..... 
    } 
} 
alert(request.toString()); //for testing 

}

功能addRequest設置(REQ){

try {          //create a request for netscape, mozilla, opera, etc. 
    request = new XMLHttpRequest(); 
}catch (e) { 

    try {         //create a request for internet explorer 
     request = new ActiveXObject("Microsoft.XMLHTTP"); 
    }catch (e) {       //do some error-handling 
     alert("XMLHttpRequest error: " + e); 
    } } 

request.open("GET", req, true);  //prepare the request 
request.send(null);  //send it 

return request;} 

回答

0

您正在使用從服務器獲取數據的JavaScript技術通常被稱爲異步Java和XML(AJAX)。在調用send()之前,您需要在addrequest()中設置onreadystatechange方法。你想要做的是傳遞一個回調方法addRequest設置()和:

if (http.readyState == 4 && http.status == 200) { 
    callback(http); 
} 

請求熄滅時的send()被調用;當從服務器接收到響應時,會觸發onreadystatechange()方法。這可以同步完成(瀏覽器將掛起直到收到響應)或異步完成(發送方法退出並且其他代碼/行爲可以運行,直到onreadystatechange()被觸發)。在您的回調方法:

-http.responseText有

-http.responseXML有DOM風格的XML文檔對象,如果響應來自於有效的XML格式的請求的結果。

- 檢查所述http.responseXML.parseError.errorCode(0表示成功)

- 如果存在錯誤,http.responseXML.parseError.reason顯示錯誤消息

- 注意的是,AJAX調用可能是「成功」,但服務器可能會發回錯誤響應;你也應該檢查一下。

+0

AJAX的介紹: http://www.w3schools.com/Ajax/ajax_intro.asp – RMorrisey 2009-09-22 18:10:42

+0

我做了更改,但我仍然沒有從javascript調用中獲取任何回覆。 ??我能做些什麼來縮小這個問題的範圍? – Rick 2009-09-22 19:06:27

+0

謝謝你的建議 - 它幫助,我得到了它的工作。我是接下來的90毫秒快樂的程序員! – Rick 2009-09-22 19:19:39