从JSP(服务器端)设置JavaScript变量而不重新加载页面

时间:2013-12-16 17:12:17

标签: javascript jsp

我想从JSP设置一个JavaScript变量,而不会导致整个页面重新加载。我现在的代码设置了变量,但重新加载整个页面作为副作用。

example.jsp:

    <html>
      <select name="country" id="country"onchange="getCountryI()">
        <option value="">Select</option>
        <option value="india">India</option>
        <option value="aus">Austrila</option>
        <option value="uk">U.K</option>
        <option value="eng">England</option>
        <option value="westindies">West-Indies</option>
      </select>
    </html>
    <script>
      function getCountryI() {
        alert(3);
        var id = document.getElementById("country").value;
        window.location.replace("example.jsp?name=" + id);
      }
</script>
      <%
         String value = request.getParameter("name");
         System.out.println("value is" + value);
         out.println("valuevaluevalue" + value);
       %>

3 个答案:

答案 0 :(得分:0)

问题不在于&lt; %%&gt;。 已调用onChange事件,此代码正在“刷新”页面。 (实际改变位置)

 window.location.replace("example.jsp?name=" + id);

尝试调试。

答案 1 :(得分:0)

这部分无效:

<script>
  function getCountryI() {
    alert(3);
    var id = document.getElementById("country").value;
    window.location.replace("example.jsp?name=" + id);
  }
  <%
     String value = request.getParameter("name");
     System.out.println("value is" + value);
     out.println("valuevaluevalue" + value);
   %>
</script>

out.println将在刷新后在呈现的页面中添加无效的脚本内容,也不会显示。

<% %>部分应该移出脚本,如下所示:

<script>
  function getCountryI() {
    alert(3);
    var id = document.getElementById("country").value;
    window.location.replace("example.jsp?name=" + id);
  }
</script>
  <%
     String value = request.getParameter("name");
     System.out.println("value is" + value);
     out.println("valuevaluevalue" + value);
   %>

答案 2 :(得分:0)

你可以使用老式的Ajax:

<form action="..." method="..." target="foo">
    ...
    <input type="submit" value="Submit">
</form>

<iframe id="foo"></iframe>

您可以将onload事件处理程序附加到iframe,以便您可以提取所需的任何信息:

var foo = null;
var iframe = document.getElementById("foo");

iframe.addEventListener("load", function() {
    var win = iframe.contentWindow || iframe.contentDocument;

    foo = win.foo
});

IFRAME中的响应可以有一个普通的<script>标记,用于设置该文档中的全局变量,您可以从父窗口访问该变量。

编辑:此处的关键是FORM标记上的target属性包含IFRAME上id的值。这将导致表单提交到IFRAME,并在IFRAME中加载响应。