如何从JSP中获取Servlet中的JSON对象?

时间:2010-05-04 08:25:07

标签: javascript ajax json servlets

在JSP页面中,我写道:

var sel = document.getElementById("Wimax");
var ip = sel.options[sel.selectedIndex].value;
var param;
var url = 'ConfigurationServlet?ActionID=Configuration_Physical_Get';
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
httpRequest.open("POST", url, true);
httpRequest.onreadystatechange = handler(){
if (httpRequest.readyState == 4) {
if (httpRequest.status == 200) {
param = 'ip='+ip;
param += 'mmv='+mmv;
param += "tab="+tab;
}};
httpRequest.send(param);

我想在param中使用此ConfigurationServlet变量。谁能告诉我如何在servlet中获取这个json对象?

更新:我更改了语句,现在显示状态代码为200。

var index = document.getElementById("Wimax").selectedIndex;
var ip = document.getElementById("Wimax").options[index].text;
httpReq = GetXmlHttpObject();
alert(httpReq);
var param = "ip=" + ip; 
param += "&mmv=" + mmv; 
param += "&tab=" + tab; 
alert("param "+param);
var url="http://localhost:8080/WiMaxNM/ConfigurationServlet?ActionID=Configuration_Physical_Get";
url = url+"?"+param;
httpReq.open("GET",url,true);
alert("httpReq "+httpReq);
httpReq.onreadystatechange = handler;
httpReq.send(null);

但是出现了新的问题。 Control根本不是url中指定的servlet操作ID。请告诉我这里有什么问题。

1 个答案:

答案 0 :(得分:0)

只有在发送请求后才会调用处理程序中的代码。您需要在此之前填充param。您还需要按&连接单独的参数。

因此,例如

// ...
httpRequest.onreadystatechange = handler() {
    // Write code here which should be executed when the request state has changed.
    if (httpRequest.readyState == 4) {
        // Write code here which should be executed when the request is completed.
        if (httpRequest.status == 200) {
            // Write code here which should be executed when the request is succesful.
        }
    }
};

param = 'ip=' + ip;
param += '&mmv=' + mmv;
param += "&tab=" + tab;
httpRequest.send(param);

然后,您可以通过HttpServletRequest#getParameter()方式在servlet中访问它们。


也就是说,您在那里发布的Ajax代码只能在Microsoft Internet Explorer中使用,而不是全世界所知的其他四个主要的Web浏览器。换句话说,您的Javascript代码不适用于世界上大约一半的人。

我建议您查看jQuery以减轻所有冗长的工作并弥合交叉浏览器的兼容性问题。

可以轻松替换所有代码
var params = {
    ip: $("Wimax").val();
    mmv: mmv,
    tab: tab
};
$.post('ConfigurationServlet?ActionID=Configuration_Physical_Get', params);

并且仍在所有网络浏览器中工作!

更新:根据您的更新,最终的网址是完全错误的。 ?表示查询字符串的开始。您的网址中已有一个。您应该使用&链接查询字符串中的参数。即。

url = url + "&" + param;