【问题标题】:Making AJAX POST request to Servlet fails向 Servlet 发出 AJAX POST 请求失败
【发布时间】: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方法发出请求。编辑代码使其更清晰

标签: java ajax servlets post


【解决方案1】:

如果您发布所有数据,则所有数据都在请求正文中,而不是在 url 上。从here 你可以看到getQueryString 只获取url 上的内容。

请参阅here 了解如何获取请求正文。

此外,如果您的数据是名称/值对,您可能需要使用 getParameter 和相关方法。

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

【讨论】:

  • 这有点道理。我确实有 doPost()。关注同一个问题-“request.getAttribute()”和“request.getParameter()”有什么区别。在我使用的 servlet 中,request.getAttribut() 用于检索请求参数。这似乎适用于 GET 但不适用于 POST。
  • getParameter 用于获取 from key=val 的参数。 get 属性获取请求的属性,它们是不一样的。您想使用 getParameter 和相关方法
  • @indusBull:HttpServletRequest 有 getParameter() 和 getAttribute() 方法。您认为返回请求参数的是哪一个?试着逻辑思考……
  • @BalusC 在问这个问题之前我的逻辑结论是 getParameter()。但是我正在访问的 servlet(由一些经验丰富的人编写)具有 getAttributes() 方法。这让我很困惑。
  • 只是用来获取请求属性。不是参数。
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
相关资源
最近更新 更多