向Servlet发出AJAX POST请求失败

向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()

+0

在ajax中检查你的if语句,好像它总是执行没有任何有效载荷的xmlhttp.send()。尝试提醒以检查每次选择哪个条件选项。 – doNotCheckMyBlog

+0

其实如果没有参数,我用GET方法发出请求。编辑代码,使其更清晰 – indusBull

空异常,如果你做一个职位的所有数据在请求正文中,而不是在url上。从here您看到getQueryString只能获取网址上的内容。

请参阅here了解如何获取请求正文。此外,如果您的数据是名称/值对,则可能需要使用getParameter及相关方法。

如果请求为空,请问您是否在您的servlet上实现了doPost

+0

这是有道理的。我确实有doPost()。以下是同一个问题 - “request.getAttribute()”和“request.getParameter()”之间有什么区别。在我使用的servlet中,request.getAttribut()用于检索请求参数。这似乎适用于GET,但不适用于POST。 – indusBull

+0

getParameter用于获取from key = val的参数。 get属性获取请求属性,它们不一样。你想使用getParameter和关联的方法 – hvgotcodes

+0

@indusBull:'HttpServletRequest'有'getParameter()'和'getAttribute()'方法。你认为哪一个*它返回请求**参数**?尝试从逻辑上思考... – BalusC