Javascript 无法将变量值从JS发送到Java类
我正在使用Google登录并获取用户电子邮件和token-id。我正在捕获JavaScript函数中的值,这可以正常工作。下面是使用的代码片段。我有一个http servlet类需要这些数据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
<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);