如何在同一页面上的JSP范围内读取JS中的变量值?

时间:2012-01-04 14:03:00

标签: javascript jsp

我有一个JSP页面,其中使用了第三方登录插件,即JS。登录成功后,必须在JSP中使用JS中获取的user-id来存储该值。

为此,我尝试'操纵'jQuery,但只有当JS值是文字或预先知道时才有效。但在这种情况下,值会在运行时根据登录信息获取。

还尝试了<% String s = "<script>document.writeln(var)</script>"; %> 但再次出现上述问题。只有在手头知道价值时才有效。

document.getElementById("ppurl").innerHTML = ppurl;打印该值。但我想存储它。

那么,如何实现将JS中的变量值传递给JSP的目的呢?

3 个答案:

答案 0 :(得分:1)

假设您的第三方登录插件是客户端 JavaScript:

请记住,当页面到达客户端时,JavaScript会运行。 JSP代码早已完成,因此不再出现在图片中。

您可以立即看到三个选项:

  1. 使用Ajax或类似内容将数据发送
  2. 刷新页面(在刷新过程中将登录数据发送到服务器)。
  3. 通过DOM更新您希望在其中包含此值的页面上的内容。
  4. #1和#2应该是相当不言自明的。

    对于#3:假设您在页面上有各种表单,并且您希望确保登录令牌或您从客户端插件获得的任何内容都使用表单中的隐藏字段与表单一起发送名称tokenField。你可以这样做:

    function putTokenOnForms(token) {
        var forms, index, form;
        forms = document.getElementsByTagName("form");
        for (index = 0; index < forms.length; ++index) {
            form = forms[index];
            if (form.tokenField) {
                form.tokenField.value = token;
            }
        }
    }
    

    您可以对a元素中的链接(添加到返回到您服务器的每个链接的href属性)执行相同的操作,等等。

答案 1 :(得分:0)

将JavaScript输出到客户端的页面无法从该JavaScript读取数据。

您需要发起一个新的HTTP请求(例如使用XMLHttpRequest或设置location.href),将数据传递回服务器,然后将其读入(例如,从查询字符串或POST数据中)。

答案 2 :(得分:0)

使用JS将其存储在cookie中。在JSP中阅读它。

在JS中,获得userID后,您可以执行以下操作:

document.cookie = 'myuserid='+userID;

在JSP中,您可以像以下一样阅读:

Cookie[] cookies = request.getCookies();
String userID;
for(int i = 0; i < cookies.length; i++) { 
    Cookie c = cookies[i];
    if (c.getName().equals("myuserid")) {
        userID = c.getValue(); // c.getValue() will return the userID
        break;
    }
}