无法将变量值从JS发送到Java类

时间:2018-02-09 00:39:37

标签: javascript servlets httprequest httpresponse

我正在使用Google登录并获取用户电子邮件和令牌ID。我正在捕获JavaScript函数中的值,这是正常的。这是使用的代码段。我有一个需要这些数据的http servlet类。

<div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark" onSubmit=></div>
<script>
function onSignIn(googleUser) { 

    // The ID token you need to pass to your backend:
    var id_token = googleUser.getAuthResponse().id_token;
    console.log("ID Token: " + id_token); 

    //send to backend
    postIt(id_token);
  };


  function postIt(id_token) { 
      var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
              document.getElementById("demo").innerHTML = this.responseText;
            }
          } 
          xhttp.open("POST","index.jsp", true );
          xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
          xhttp.send("id_token");   
  }

</script>

我的Servlet看起来像这样:

   public class TestServlet extends HttpServlet {

   protected void doPost(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException {

    String id_token;
    String email; 

    id_token=request.getParameter("id_token"); 

    HttpSession session=request.getSession(true);
    System.out.println("all is ok");
    try {
            System.out.print(id_token); 

        } catch (Exception e) {

            e.printStackTrace();
        }
    }
}  

我在浏览器控制台中得到了未被捕获的TypeError。我认为问题出在postIt函数中。 我无法理解如何将id_token值发送到servlet。有人可以请更正我的代码吗?

1 个答案:

答案 0 :(得分:1)

快速浏览后,我在您的代码中看到了三个问题:

  1. 没有任何#demo元素(或您尚未提供)
  2. 您尚未打开XMLHttpRequest到您的特定课程。
  3. 您不会将id_token发送到服务器,只发送参数。
  4. <强>代码:

    /* Open the request to the servlet. */
    xhttp.open("POST", "TestServlet", true);
    
    /* Send the token to the server mapped to the 'id_token' parameter. */
    xhttp.send("id_token=" + id_token);