gpt4 book ai didi

java - 如何使用Jquery 从servlet 获取返回的数据?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:17:05 25 4
gpt4 key购买 nike

我目前正在学习jsp/servlet,并尝试做一个网上书店。使用 jquery,我能够将 GET 请求发送到 servlet。成功后,它将使用 browseBookArea.jsp 重新加载 browseBookArea div。我不明白的是,此过程导致我的 glashfish servet 无限循环(它发生在 BrowseBookTag.java 中。我在那里放了一个 System.out.println 来检查它)。

是否有另一种方法可以将 servlet 返回的数据返回给 Jquery,这样我就可以正确地做到这一点?我认为在 session 中设置变量不是一个好方法。我看到了 jquery.get 的示例,我们可以在其中获取响应数据。

  var currentCat = "all";
$(document).ready(function(){
$(".categoryItem").click(function(event){
$("#browseBookArea").fadeToggle(100);
currentCat = $(this).attr("id");
$.get("GetBookFromCategoryServlet",{selectedCat:currentCat, currentPage:1}); });
$("#browseBookArea").ajaxSuccess(function(){
$(this).show(300);
$(this).load("Components/browseBookArea.jsp");
});

$(".pagination").click(function(event){
$("#browseBookArea").fadeToggle(100);
var page = $(this).attr("id");
alert(currentCat);
$.get("GetBookFromCategoryServlet",{selectedCat:currentCat, currentPage:page});
});
});

这是我的 browseBookArea.jsp:

<div id="browseBookArea" class="span-15 last">
<%System.out.println("Back from servlet");
Collection c = (Collection) request.getAttribute("booksFromCat");
if (c == null) {
Collection c1 = (Collection) session.getAttribute("booksFromCat");
if (c1 == null) System.out.println("Books are null");
}
%>
<myJavaTags:BrowseBookTag books="${booksFromCat}" pageSize="${pageSize}" >
<c:if test="${not empty book1 }">
<div class="span-7">
<center>
<img width="115px" height="115px" src='${book1.photoPath}.jpg'/>
<p>${book1.price}<br/><a>${book1.title}</a> <br/>${book1.authorName}<p>
</center>
</div>
</c:if>
<c:if test="${not empty book2 }">
<div class="push-1 span-7 last">
<center>
<img width="115px" height="115px" src='${book2.photoPath}.jpg'/>
<p>${book2.price}<br/><a>${book2.title}</a> <br/>${book2.authorName}<p>
</center>
</div>
</c:if>
<hr class="space">
</myJavaTags:BrowseBookTag>
<hr class="space"/>
</div>

我的 BrowseBookTag:

 public void doTag() throws JspException, IOException{
// if (books ==null){
// admin = AdminBeanFactory.getAdminInstance();
// books = admin.browseBook(cat);
// }
Iterator bookIt = books.iterator();
JspContext jsp = getJspContext();
int i = 0, count = 0;
System.out.println("Total book size in browse tag: "+books.size());
while (bookIt.hasNext() && i < pageSize){
BookDTO b = (BookDTO) bookIt.next();
if (count == 0){
jsp.setAttribute("book1", b);
if ((i+1) == pageSize){
jsp.setAttribute("book2", null);
getJspBody().invoke(null);
}
count++;
}else{
jsp.setAttribute("book2", b);
getJspBody().invoke(null);
count = 0;
}
i++;
}
}

最佳答案

我找到了罪魁祸首。它是:

$("#browseBookArea").ajaxSuccess(function(){                               
$(this).show(300);
$(this).load("Components/browseBookArea.jsp");
});

不好,不好,不好。这表明我不知道 success 方法调用的含义。我刚刚意识到,如果我让 #browseBookArea div 每次都加载,它会导致操作成功,然后它会再次执行,最终导致递归。我终于摆脱了这个陷阱。正确的应该是:

$(".categoryItem").click(function(event){
$("#browseBookArea").fadeToggle(100);
var currentId = $(this).attr("id");
$.get("GetBookFromCategoryServlet",{selectedCat:currentId, currentPage:1}, function(data){
$("#browseBookArea").fadeIn(300);
$("#browseBookArea").load("Components/browseBookArea.jsp");
});
});

我只需要在GET请求后定义一个成功的handler,成功的handler一定不能是调用操作的div。

关于java - 如何使用Jquery 从servlet 获取返回的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5703440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com