【问题标题】:AJAX not receiving response from servletAJAX 未收到来自 servlet 的响应
【发布时间】:2017-05-20 17:09:29
【问题描述】:

我有一个 AJAX 向 servlet 发送 POST。 Servlet 进行一些计算并返回响应。 AJAX 成功函数读取响应并执行某些操作。

AJAX 调用

$.ajax( {
     type: "POST",
     url: "/bin/path/to/Servlet",
     data: $(this).serialize(),
     dataType: "html",
     success: function(responseValue) {
         if(responseValue == '200') {
              // Do something
          }else {
              console.log("it is not 200");
          }
     },
     error: trialForm.trialError
     }).done(function(status) {
             $(trialForm.submitButton).show();
             $(trialForm.loader).hide();
     });
}

伺服器

protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) {
     response.setContentType("text/html");    

     URL url = new URL("www.apriurl.com");
     HttpURLConnection conn = (HttpURLConnection) url.openConnection();
     conn.setDoOutput(true);
     conn.setRequestMethod("POST");
     conn.setRequestProperty("Content-Type","application/json");
     conn.setRequestProperty("Authorization","XXXXZZZZ " + strSig);
     conn.setRequestProperty("Accept","application/json");
     conn.setRequestProperty("ZZZZZ",clientID);

     OutputStream os = conn.getOutputStream();
     os.write(inputParameters.getBytes());
     os.flush(); 

     System.out.println(conn.getResponseCode());
     response.getWriter().write(conn.getResponseCode());
}
  • responseValue 是 java 类中使用的变量。
  • 它具有正确的价值。 sys out 执行后,我看到在日志文件中打印的值
  • 响应只是一个乱码的问号 (?)。我控制台记录了它。我猜它必须与数据类型有关。我尝试了其他几种类型,但无法弄清楚。如有任何帮助,我们将不胜感激。

【问题讨论】:

  • 你的问题不是很清楚。首先,您似乎没有将responseValue 添加到servlet 中的response,而且您似乎也没有在JS 中检索和使用responseValue
  • 对不起,我试图从帖子中删除不必要的代码。显然,我在这方面做得不好。基本上,Servelt 与第 3 方 api 交互,无论它从第 3 部分得到什么响应,它都会传递给 AJAX。我回答我从第 3 方得到的很好,我可以记录它但无法将它传递给 AJAX
  • 是的,我试过response.getWriter().write("test");,而不是ajax回调函数获取值而不是乱码。

标签: java jquery ajax servlets


【解决方案1】:

这是在做 write (int) 而不是 write (String) 所以如果你这样做 write(200) 它发送的 ascii 值是 200

尝试将200 作为字符串发送

作为

response.getWriter().write(String.valueOf (conn.getResponseCode()));

https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#write(int)

公共无效写入(int c)

写入单个字符。

【讨论】:

  • 谢谢!我做了response.getWriter().write(String.valueOf(conn.getResponseCode())); 并且有效
  • 绝对!我只是忙着为工作代码幸灾乐祸。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 2015-10-12
  • 2013-05-03
  • 1970-01-01
相关资源
最近更新 更多