jquery:POST数据+重定向页面无法按预期工作

时间:2010-10-16 11:04:37

标签: jquery redirect

我正在尝试使用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。我很难过。

3 个答案:

答案 0 :(得分:2)

你不能像这样重新加载<html>的全部内容......无论如何你都要刷新整个页面(有点打败AJAX的意思),为什么不只是使用正常的{{1}和回发?它看起来像这样:

<form>

答案 1 :(得分:0)

您没有重定向到某个网页,在使用AJAX从其他网页获取text / html后,您使用javascript替换<html></html>标记之间的所有内容。

浏览器视图源通常会在首次加载时显示页面的原始来源。您之后所做的任何更改都不会在此处反映出来。如果您使用Firefox Firebug或IE Firebug Lite等工具,您可以看到您对页面元素所做的更改。

当您替换<body>中的内容时,事情似乎有效的原因是因为您的脚本位于<body>标记中的<head>之外,当您使用{ {1}}

你究竟想做什么?也许详细解释这个场景可以帮助我们更好地帮助你。表格POST后需要做什么?

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();