我想从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);
%>
答案 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中加载响应。