我正在尝试使用POST方法提交一些数据并重定向页面。但是每当我单击提交按钮时,jquery都无法在新页面上正确加载。 我能够将我的问题减少到以下代码。例如,如果我按提交,则会加载新页面。但“提交”按钮不会给出任何响应,也不会显示任何警告框。
<html lang="en">
<head>
<script type="text/javascript" src="{{ MEDIA_URL }}site/jquery-1.4.2.js"></script>
<script type="text/javascript">
$( document ).ready( function() {
$('#submit').click( function() {
alert("Submit button pressed" );
$.post("/questions/submit/",
{qid:1, ans:"dummy" },
function(data) {
$('html').html(data);
});
});
});
</script>
</head>
<body>
<a href="/accounts/logout">Logout</a>
{{ section.qid }}
<button id="submit">Submit</button>
</body>
</html>
显然,只要通过jquery将新数据加载到页面中,就不会执行jquery脚本和函数。所以我必须在页面上进行“刷新”,一切都很完美。但是,在post函数中,如果我将'html'更改为'body',则提交工作正常。
$('body').html(data);
但是不同的页面可能包含不同的脚本文件。所以我不赞成这样做。应该是实现这个的理想方法,以便正确加载jquery函数?
PS:在检查“页面源”时,我注意到旧的section.qid存在于页面源中。但是,浏览器呈现新的(显然是正确的)section.qid。我很难过。
答案 0 :(得分:2)
你不能像这样重新加载<html>
的全部内容......无论如何你都要刷新整个页面(有点打败AJAX的意思),为什么不只是使用正常的{{1}和回发?它看起来像这样:
<form>
答案 1 :(得分:0)
您没有重定向到某个网页,在使用AJAX从其他网页获取text / html后,您使用javascript替换<html>
和</html>
标记之间的所有内容。
浏览器视图源通常会在首次加载时显示页面的原始来源。您之后所做的任何更改都不会在此处反映出来。如果您使用Firefox Firebug或IE Firebug Lite等工具,您可以看到您对页面元素所做的更改。
当您替换<body>
中的内容时,事情似乎有效的原因是因为您的脚本位于<body>
标记中的<head>
之外,当您使用{ {1}}
AJAX通常用于避免刷新整个页面或整个内容,而只刷新页面上需要更改的元素。
答案 2 :(得分:0)
在按钮上单击调用下面的函数()并传递参数,在我的情况下,我将新函数传递给servlet
function checkforNew(){
jQuery.ajax({
type: "POST",
url: '<%=request.getContextPath()%>/MyController?&oper=new',
//data: {'obj':data},
dataType: "json",
success: function(response){
window.location.href = response.redirect;
}
});
}
在servlet内部,您需要提及以下代码,以便重定向页面。
String destination =“/ mypage.jsp;
response.setContentType("application/json");
JSONObject responsedata = new JSONObject();
responsedata.put("redirect", destination);
out.print(responsedata);
out.flush();