JavaScript变量的范围?

时间:2010-05-22 18:12:37

标签: javascript jsp

如何从JSP页面中访问JavaScript变量?

4 个答案:

答案 0 :(得分:3)

我的猜测是你可能在客户端(在浏览器中)运行Javascript,在服务器上的JSP页面运行Java。您无法访问服务器上的客户端变量。您可以从客户端向服务器发送客户端变量的以进行服务器端处理。您可能通过Ajax call或仅提交表单来完成此操作。

编辑例如,此Javascript代码使用字段名称“foofield”将foo变量的值发送到服务器端页面'test.jsp'(名称略有不同)清楚)。这使用Prototype,但jQueryClosureall the other libs可以做同样的事情,只是语法略有不同:

服务器端Java(在JSP中) - 这就像从已提交的表单中获取字段一样:

String foo;

foo = request.getParameter("foofield");

客户端Javascript(使用Prototype的Ajax.Request):

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

如果您更喜欢客户端的jQuery,那么这是为jQuery的ajax函数重写的Prototype代码:

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

答案 1 :(得分: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可以识别JSPValue,因为它将被服务器放在那里。例如,当发送到浏览器时,它可能看起来像:

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

答案 2 :(得分:0)

不可能。您可以在javascript中访问JSP变量,但无法在JSP中访问javascript变量。

答案 3 :(得分:0)

由于javascript在客户端运行而JSp在服务器端运行,因此无法在jsp代码中访问javascript变量,但是你可以通过传递该变量来访问服务器端的javascript变量以及请求作为请求参数,因为请求参数存在于jsp代码可用的请求对象中,您可以访问它们。