2012-01-04 28 views
0

我有一個JSP頁面,其中使用了第三方登錄插件,即JS。登錄成功後,必須在JSP中使用通過JS獲取的用戶標識,以通過存儲該值來維護會話。爲此,我嘗試'操作'jQuery,但只有在JS值是文字或預先知道的情況下才有效。但是在這種情況下,在運行時根據登錄提取值。如何在同一頁面的JSP範圍內讀取JS中變量的值?

也試過<% String s = "<script>document.writeln(var)</script>"; %> 但是又出現了上述問題。只有在事先知道價值時纔有效。

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

那麼,如何實現將JS中的變量值傳遞給JSP的目的呢?

+0

把你的鼠標下面的JSP標籤上方您的問題,並等到黑色信息框顯示。然後點擊wiki頁面的* info *鏈接。向下滾動一下直到「JavaScript」一章。仔細閱讀。 – BalusC 2012-01-04 14:22:23

回答

1

假設您的第三方簽名的插件,是客戶端的JavaScript

記住,JavaScript的網頁時達到客戶運行。 JSP代碼早已完成,因此不再是圖片。

你有三個選擇,我馬上就可以看到:

  1. 發送數據使用Ajax或類似的服務器。
  2. 刷新頁面(作爲刷新的一部分,將登錄數據發送到服務器)。
  3. 通過DOM更新頁面上您希望獲得該值的任何內容。

#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屬性)鏈接一樣,等

+0

這也是一個好點。某些第三方登錄使用JavaScript來發起請求,但隨後使用令牌或標識將瀏覽器發送到域中的收據頁面或回調頁面。您將不得不存儲令牌或標識,並將用戶重定向到回調頁面中的相應頁面。 – PlexQ 2012-01-04 14:14:41

0

輸出頁面JavaScript到客戶端無法從該JavaScript讀取數據。

您需要發起一個新的HTTP請求(例如使用XMLHttpRequest或設置location.href),將數據傳回服務器,然後再讀入(例如從查詢字符串或POST數據中讀取)。

+0

我想我肯定會更喜歡這個查詢字符串的位置更新。它允許服務器操縱該值並以最小的麻煩適當地重建頁面。進行AJAX調用將允許您存儲用於下一頁請求的值,並且複雜度高一級。如果您沒有令人信服的理由使用AJAX,請不要。 – PlexQ 2012-01-04 14:10:18

0

使用JS將它存儲在cookie中。在JSP中讀回它。

在你的JS,你得到的用戶ID後,你可以這樣做:

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; 
    } 
}