2010-10-16 54 views
0

我想使用POST方法提交一些數據並重定向頁面。但是,無論何時點擊提交按鈕,jquery都無法在新頁面上正確加載。 我能夠將我的問題減少到以下代碼。例如,如果我按提交,新的頁面被加載。但提交按鈕不會給出任何響應,並且不會出現警告框。jquery:POST數據+重定向頁面不按預期方式工作

<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("https://stackoverflow.com/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。我很難過。

回答

2

你不能像這樣重新載入<html>的全部內容...無論如何你都刷新了整個頁面(爲了擊敗AJAX),爲什麼不使用正常的<form>和回發?它應該是這樣的:

<html lang="en"> 
    <head></head> 
    <body> 
    <a href="/accounts/logout">Logout</a> 
    {{ section.qid }} 
    <form method="post"> 
     <input type="hidden" name="qid" value="1" /> 
     <input type="hidden" name="ans" value="dummy" /> 
     <button id="submit">Submit</button> 
    </form> 
    </body> 
</html> 
+0

我希望它冷是簡單的。我寫的代碼是高度簡化的。在實際問題中,用戶只能在使用另一個按鈕自定義驗證後才允許提交(客戶要求:))。所以基本上是的,我試圖用jquery代碼來模擬「post + form + submit」html。有出路嗎? – Neo 2010-10-16 11:12:11

+0

@Neo - 然後我會阻止提交事件,直到通過附加'.submit()'處理程序到'

',但沒有編寫自己的回發行爲已經工作了幾十年的按鈕/確認:) – 2010-10-16 11:16:03

+0

好的,回到帖子表格。 – Neo 2010-10-16 11:23:23

0

你沒有重定向到一個頁面,你使用javascript使用AJAX另一個頁面獲取文本/ HTML後更換<html></html>標籤之間的一切。

瀏覽器視圖源通常會顯示頁面初始加載時的原始源代碼。之後所做的任何更改都不會反映在此處。如果您使用類似Firefox的Firebug或IE的Firebug Lite這樣的工具,您可以看到您對頁面元素所做的更改。

爲什麼事情似乎當你更換<body>裏面的內容,以工作的原因是因爲你的腳本是在被替換當您使用html

究竟是你試圖做<head>標籤<body>外?也許詳細解釋場景可以幫助我們更好地幫助你。表單POST後需要發生什麼?

AJAX通常用於避免刷新整個頁面或整個內容,而只是刷新頁面上需要更改的元素。

+0

實際上,我試圖用一些jQuery代碼替換一個html表單(稱之爲模擬ajax中的html表單)。原因是我應該使用另一個按鈕來進行一些自定義的服務器端驗證,只有這樣才允許提交。 – Neo 2010-10-16 11:14:50

+0

這不是真的準確,它取決於瀏覽器,你看到什麼來源。 – 2010-10-16 11:16:53

+0

@Nick,哪些瀏覽器是例外?假設有,更新了我的答案。 – 2010-10-16 11:20:02

0

在按鈕點擊調用這個函數()下方,並通過參數時,在我的情況下,我通過了新的與Servlet

功能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需要提及下面的代碼,用於頁面重定向。

字符串目的地=「/mypage.jsp;

  response.setContentType("application/json"); 
      JSONObject responsedata = new JSONObject(); 
      responsedata.put("redirect", destination); 

      out.print(responsedata); 
      out.flush();