【发布时间】:2011-11-08 01:41:45
【问题描述】:
从我的客户端代码中,我正在对我的 servlet 进行 AJAX 调用。如果我使用 GET 作为请求方法。一切正常,我得到回应。但是当我将请求作为 POST 发送时,servlet 无法发送响应。从日志中我发现,当使用 POST 进行 ajax 调用时,servlet 中的“请求”对象为空。根据这篇文章: Servlet response to AJAX request is empty ,我正在为同源策略设置标题。
以下是我的参考代码:
function aimslc_ajaxCall(url,callback, postParams){
var xmlhttp = null
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
eval( callback+"("+xmlhttp.responseText+")" );
}
}
if(postParams!=null && typeof postParams!="undefined" ){
xmlhttp.open("POST",url,true);
xmlhttp.send(postParams);
}else{
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
}
Servlet 代码:
public void doProcess (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.info("doProcess::start..."+request.getQueryString());
response.setHeader("P3P","CP='NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM'");
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Access-Control-Allow-Credentials","true");
response.setHeader("Access-Control-Allow-Methods","POST, GET");
}
在 request.getQueryString() 上抛出一个空异常
【问题讨论】:
-
在 ajax 中检查你的 if 语句,似乎它总是执行 xmlhttp.send() 而没有任何有效负载。尝试发出警报以检查每次选择哪个条件选项。
-
其实如果没有参数,我用GET方法发出请求。编辑代码使其更清晰