【问题标题】:Javascript calling a java Servlet and return data helpJavascript 调用 java Servlet 并返回数据帮助
【发布时间】:2010-11-30 11:53:06
【问题描述】:

我对 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 

}

function 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;}

【问题讨论】:

    标签: javascript mysql servlets xmlhttprequest


    【解决方案1】:

    您用于从服务器检索数据的 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 调用可能是“成功”但服务器可能会发回错误响应;你也应该检查一下。

    【讨论】:

    • 我进行了更改,但我仍然没有从 javascript 调用中得到任何反馈。 ??我该怎么做才能缩小问题范围?
    • 感谢您的建议 - 它有所帮助,我得到了它的工作。在接下来的 90 毫秒里,我是一个快乐的程序员!
    • 很高兴你把它修好了 =) 对不起,我没有看到你之前的评论
    猜你喜欢
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2011-01-09
    • 2011-11-03
    • 2011-10-21
    • 1970-01-01
    相关资源
    最近更新 更多