从我的客户端代码,我正在对我的servlet进行AJAX调用。如果我使用GET作为请求方法。一切正常,我得到回应。但是当我发送请求作为POST时,servlet无法发送响应。从日志中我发现,在使用POST进行ajax调用时,servlet“request”对象为null。根据这篇文章: 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()
上抛出一个null异常答案 0 :(得分:3)
如果您发布帖子,则所有数据都在请求正文中,而不是在网址上。从here开始,您会看到getQueryString
仅获取网址上的内容。
请参阅here了解如何获取请求正文。
此外,如果您的数据是名称/值对,则可能需要使用getParameter及相关方法。
如果请求为null,我问你在servlet上实现doPost
吗?