2013-01-03 74 views
1

我在這樣生成的網頁上有一個部分。Jquery .load()後面一步

<table> 
    <c:forEach items="${personList}" var="person"> 
     <tr> 
      <td> 
      </td> 
      <td> 
       <h2 style="text-align:left;">${person.reviewName}</h2>    
       <h2 style="text-align:right;">by ${person.name}</h2> 
      </td> 
     </tr> 
     <tr> 
      <td style="text-align:right;"> 
       <img src="<c:url value="/resources/${person.id}.jpg" />" > 
      </td> 
      <td> 
       ${person.review} 
      </td> 
     </tr> 
     <tr> 
      <td> 
      </td> 
      <td> 
       <div id="${person.id}" class="comment">comments</div> 
      </td> 
     </tr> 
     <tr id="ins${person.id}"> 
      <td> 

      </td> 
      <td id="comments${person.id}" style="display:none"> 
      <div id="ins${person.id}"> 
       <table> 
         <c:forEach items="${person.comments}" var="comment"> 
          <tr> 
           <td> 
            ${comment} 
           </td> 
          </tr> 
         </c:forEach> 
       </table> 
       Add Comment: 
       <textarea id="comment${person.id}"></textarea> 
       <button onClick="addComment(${person.id})">add Comment</button> 
      </div> 
      </td> 
     </tr> 
    </c:forEach> 
</table> 

我想使用JQuery.load()立即更新評論部分,當這樣添加新的評論時。

function addComment(id) { 
    $.getJSON("addComment", {id:id, comment:$("#comment" + id).val()}); 
    $("#comments2").load("home #ins2"); 
} 

的問題是,當我點擊添加,只顯示我以前添加註釋的評論,這意味着註釋部分始終是一個落後的評論。如果我在添加評論後直接加載頁面,它應該顯示它。另一個奇怪的是,當我添加評論時,插入空白行時,評論的頂部,當我直接加載頁面時,不存在/消失。

我想這可能是某種緩存問題,從而試圖將其關閉使用

$.ajaxSetup ({ 
    cache: false 
}); 

然而,這並沒有區別。

我真的在這個死路一條。這與我正在使用load()作爲forEach標記的部分有關嗎?

+0

您可能(也可能應該)修改該功能,以便執行單個AJAX調用,該調用既添加新評論,然後返回所有評論的HTML。或者您可以添加新評論,並僅返回新評論的HTML,然後將其附加到頁面的相關部分。 –

回答

5

您需要加載您的意見在success回調getJSON方法來等待getJSON通話結束前重新加載您div

function addComment(id) { 
    $.getJSON("addComment", {id:id, comment:$("#comment" + id).val()}, function(){ 
     $("#comments2").load("home #ins2"); 
    }); 
} 
+0

真的嗎?怎麼來的?有什麼不同? – AlyoshaKaramazov

+1

getJSON是$ .ajax的簡寫方法。默認情況下,在執行下一條語句之前,javascript不會等待$ .ajax方法的結果。 – sdespont

+1

@ user1584500'jQuery.getJSON()'是一個AJAX調用的包裝,因此和'.load()'AJAX調用同時運行。由於它們都是異步的,因此無法保證它們會以開始它們的順序完成,但在這種情況下,您需要第一個更新註釋,然後才能檢索它們。 –