【问题标题】:using javascript variable inside the java function在 java 函数中使用 javascript 变量
【发布时间】:2011-05-09 08:19:35
【问题描述】:

想要一个关于如何访问 java 范围内的 javascript 变量的解决方案。 在下面的代码中, k 是一个 javascript 变量我如何访问它,我收到一条消息,因为 k JVM 不知道

function value_transitAccountCounter(i){
    alert('welcome -->'+i);
    for(var k=0;k<5;k++){
        if(i==k){
            return '<%=toppings[k]%>';
        }
    }
}

【问题讨论】:

    标签: java javascript jsp


    【解决方案1】:

    您的 Java 代码正在在服务器上运行。您的 JavaScript 代码正在在客户端上运行。所以你不能在服务器上使用k,直到页面完成,发送到浏览器,并执行其中的JavaScript。

    从您的代码看来,您只需要访问存储在服务器端 toppings 数组中的字符串。你有两个选择:

    1. 将整个 toppings 数组作为 JavaScript 数组输出到页面脚本。然后你就可以在客户端使用它了。

    2. 让您的value_transitAccountCounter 函数为您的服务器端代码创建一个ajax call,询问toppings[i] 的值是什么。您需要更改 value_transitAccountCounter 以接受回调以用于返回值而不是实际返回它,因为 ajax 调用将是异步的(value_transitAccountCounter 将在 ajax 调用完成之前返回,因此,在您拥有返回值)。 (进行同步 ajax 调用是可能,但这是一个非常非常糟糕的主意,你最好假装它不可能。它在调用时完全锁定了大多数浏览器的 UI执行,令人难以置信让用户感到恼火。)

    【讨论】:

    • @Crowder,如果我使用您的第一个解决方案,您是否看到服务器端操作涉及任何进一步的复杂性
    • @harigm:每当服务器上的数组发生变化时,您都需要向客户端发送一个新副本(例如,在页面刷新或类似情况下)。您对数组客户端所做的任何更改自然都需要发送到服务器(通过 ajax 或表单发布等)。
    • @Crowder,是的,我明白你的意思,但是在我的应用程序中,我不必担心这一点,因为所有事务都是事先完成的,所有值都存储在服务器端的数组中,并且我需要从服务器检索数据并显示在 UI 中,由于服务器数组无法在 javascript 中读取,所以我试图将其复制到页面脚本数组并使用 javascript 填充,如果有比这更好的主意,请建议我
    • @harigm:不了解更广泛的背景,很难推荐。但一般来说:如果您需要访问客户端上的数据,并且发送它的开销并不大,那么就发送它。 :-)
    【解决方案2】:

    您无法从 JSP 访问 JavaScript 变量。 JavaScript 在客户端运行。 JSP 在服务器端运行。你可以写这样的东西:

    function value_transitAccountCounter(i) {
        alert('welcome -->'+i);
        <% for (int k = 0; k < 5; k++) { %>
            if (i == <%= k %>) {
                return '<%= toppings[k] %>';
            }
        <% } %>
        }
    }
    

    【讨论】:

      【解决方案3】:

      JSP 在服务器上运行。它输出一些内容。内容被发送到浏览器。然后浏览器执行代码。

      不能在客户端和服务器端代码之间直接通信。

      由于 JSP 代码首先运行,因此很容易将数据从 Java 获取到 JavaScript(您只需动态生成 JavaScript),但是您想另辟蹊径。

      为了从客户端 JavaScript 变量获取数据到服务器端 JSP 变量,您必须通过以下方式发出新的 HTTP 请求:

      • 设置location.href
      • 提交表单
      • 使用XMLHttpRequest

      请求中需要包含你要传递的数据。

      【讨论】:

        【解决方案4】:

        克劳德是对的: 您不能集成您的 javascript 以查看 java 变量,但您可以做相反的事情,一般来说,总有一种方法可以反转您的问题,以便让您的 javascript 代码读取 java 变量。想一想。

        祝你好运

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-17
          • 1970-01-01
          • 2021-12-18
          • 2018-01-14
          • 1970-01-01
          • 2019-09-13
          • 1970-01-01
          • 2019-04-19
          相关资源
          最近更新 更多