向Servlet发出AJAX POST请求失败
从我的客户端代码中,我正在对我的servlet进行AJAX调用。如果我使用GET作为请求方法。一切正常,我得到回应。但是当我将请求作为POST发送时,servlet无法发送响应。从日志中我发现,在使用POST进行ajax调用时,servlet中的“request”对象为null。根据这篇文章: Servlet response to AJAX request is empty,我为同源策略设置标题。向Servlet发出AJAX POST请求失败
下面是我的参考代码:
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()
空异常,如果你做一个职位的所有数据在请求正文中,而不是在url上。从here您看到getQueryString
只能获取网址上的内容。
请参阅here了解如何获取请求正文。此外,如果您的数据是名称/值对,则可能需要使用getParameter及相关方法。
如果请求为空,请问您是否在您的servlet上实现了doPost
?
这是有道理的。我确实有doPost()。以下是同一个问题 - “request.getAttribute()”和“request.getParameter()”之间有什么区别。在我使用的servlet中,request.getAttribut()用于检索请求参数。这似乎适用于GET,但不适用于POST。 – indusBull
getParameter用于获取from key = val的参数。 get属性获取请求属性,它们不一样。你想使用getParameter和关联的方法 – hvgotcodes
@indusBull:'HttpServletRequest'有'getParameter()'和'getAttribute()'方法。你认为哪一个*它返回请求**参数**?尝试从逻辑上思考... – BalusC
在ajax中检查你的if语句,好像它总是执行没有任何有效载荷的xmlhttp.send()。尝试提醒以检查每次选择哪个条件选项。 – doNotCheckMyBlog
其实如果没有参数,我用GET方法发出请求。编辑代码,使其更清晰 – indusBull