2010-05-22 185 views

回答

3

我的猜測是,您可能在客戶端(在瀏覽器中)運行Javascript,而在服務器上的JSP頁面中運行Java。您無法訪問服務器上的客戶端變量。您可以將從客戶端發送到服務器端處理的客戶端變量的客戶端變量的。您可能會通過Ajax call或通過提交表單來完成此操作。

編輯例如,該Javascript代碼發送foo變量的值給服務器側頁面「test.jsp的」使用字段名稱「foofield」(稍有不同的名稱是清楚)。這將使用Prototype,但jQueryClosureall the other libs可以做同樣的事情,只是略有不同的語法:

服務器端Java(在JSP)  —這就像從一種形式越來越字段一直提交:(使用原型的Ajax.Request

String foo; 

foo = request.getParameter("foofield"); 

客戶端JavaScript:

// Our client-side `foo` variable 
var foo = "Hi there"; 

// Send it to the server via Ajax (Prototype version) 
new Ajax.Request('test.jsp', { 
    parameters: {foofield: foo}, 
    onSuccess: handleSuccess, // Function to call on success; not shown 
    onFailure: handleFailure  // Function to call on failure; not shown 
}); 

如果預FER的jQuery的客戶端,這裏是重寫jQuery的ajax函數原型代碼:

// Our client-side `foo` variable 
var foo = "Hi there"; 

// Send it to the server via Ajax (jQuery version) 
$.ajax({ 
    url: 'test.jsp', 
    data: {foofield: foo}, 
    success: handleSuccess, // Function to call on success; not shown 
    error: handleFailure  // Function to call on failure; not shown 
}); 
+0

您能否提供一個我如何在服務器端訪問和客戶端變量值的例子? – Rachel 2010-05-22 18:22:31

+0

@Rachel:您需要JavaScript向服務器(AJAX)發出請求,或者用值填充表單並提交。 – Dormilich 2010-05-22 18:38:23

+0

@Rachel:我加了一些例子 – 2010-05-22 18:44:40

0

不可能。您可以在JavaScript中訪問JSP變量,但無法在JSP中訪問javascript變量。

+0

您不能*「在[client-side] javascript」*中訪問JSP變量。您可以通過在服務器生成的'script'塊中的Javascript代碼中輸出變量的*值*給客戶端,這不是一回事。 – 2010-05-22 18:21:09

+0

你能否解釋一下是否有可能以其他方式做到這一點? – Rachel 2010-05-22 18:21:10

1

您無法直接訪問它。這是因爲這是一個網頁的呈現方式:

1. On the server, the JSP code runs and generates HTML/JavaScript. 
2. The HTML/JavaScript is sent to the client's browser. 
3. The browser then renders the HTML and runs the JavaScript. 

正如你所看到的,JavaScript的運行方式運行JSP之後,因此他們不能直接訪問對方的變量。

您可以做的是輸出JavaScript代碼,它根據JSP代碼中的值初始化變量。例如,如果你產生這樣的代碼(請原諒我的語法,我不知道JSP):

<script> 
    var JSPValue = /*jsp code that prints the value of a variable*/; 
    //rest of JavaScript code... 
</script> 

然後JavaScript可以accss JSPValue,只是因爲它已經被服務器放在那裏。例如,當發送到瀏覽器,它可能看起來像:

<script> 
    var JSPValue = 42; 
    //rest of JavaScript code... 
</script> 
+0

您對創建全局JavaScript變量的建議確實回答了這個問題,但不是推薦的最佳做法。從JSP動態創建任意全局變量往往會導致不爲JavaScript編寫代碼的開發人員主要陷入錯誤的功能感,這種功能容易出現命名空間衝突和意外的代碼故障。 – 2010-05-23 05:34:14

0

由於JavaScript是在客戶端運行,而JSP是在服務器端運行,則無法訪問JavaScript的變量jsp代碼,但是可以通過將請求作爲請求參數與該請求一起傳遞給服務器端的javascript變量。由於請求參數存在於可用於jsp代碼的請求對象中,因此您可以訪問它們。