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

Javascript 无法将变量值从JS发送到Java类,javascript,servlets,httprequest,httpresponse,Javascript,Servlets,Httprequest,Httpresponse,我正在使用Google登录并获取用户电子邮件和token-id。我正在捕获JavaScript函数中的值,这可以正常工作。下面是使用的代码片段。我有一个http servlet类需要这些数据 <div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark" onSubmit=></div> <script> function onSignIn(googleUser) { // Th

我正在使用Google登录并获取用户电子邮件和token-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>
我在浏览器控制台中得到未捕获的TypeError。我认为问题在于POSIT功能。
我无法理解如何将id_标记值发送到servlet。有人能帮我更正代码吗

快速查看后,我发现您的代码中存在三个问题:

  • 没有任何
    #demo
    元素(或者您没有提供)
  • 您尚未打开特定类的
    XMLHttpRequest
  • 您不向服务器发送
    id\u令牌
    ,只发送参数
  • 代码:

    /* 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);
    

    我已经为这个职位准备好了开头和结尾的支架。当我运行时,我看到这个错误“UncaughtTypeError:无法设置null”document.getElementById(“demo”)的属性“innerHTML”。innerHTML=response;这里没有…抱歉。我仍在寻找如何将值发送到我的类的答案。我相信我们需要这样做xhttp.open(“POST”,“true”);但问题是我如何引用这里的类?var response=JSON.parse(this.responseText).form.id\u标记;这是否需要表单值,因为id_标记是在google登录之后获得的,而不是表单值。我在您所指的行上方添加了一条注释,表示它仅在代码段中使用;以便向您表明请求有效。我使用的链接不是您应该向其发送请求的链接。如果这个片段让你感到困惑,那就忘掉它吧。请重新阅读我的答案,看看代码中的问题所在。在您的请求中,您只将参数发送到
    Java
    ,而不发送令牌。在“代码”下,我将向您展示必须使用的正确代码。必须将参数名与“等号”和令牌连接起来,然后发送所有参数名。这就是
    XMLHttpRequest
    的工作原理。代码如何理解它必须将数据发送到我的类TestServlet?哪一行代码是这样写的?它不是
    JavaScript
    只需将带有数据服务器端的
    hmlhtprequest
    发送到给定的url。您在那里所做的与浏览器无关。
    /* 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);