2009-09-22 13 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