首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Jquery从servlet中获取返回数据?

如何通过Jquery从servlet中获取返回数据?
EN

Stack Overflow用户
提问于 2011-04-18 21:13:58
回答 1查看 4.5K关注 0票数 3

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

有没有其他方法可以将从servlet返回的数据返回给Jquery,这样我就可以正确地进行操作了?我认为在会话中设置变量不是一个好方法。我看到了jquery.get的示例,我们可以在其中获取响应数据。

代码语言:javascript
复制
  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:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
 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++;
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-18 22:33:31

我找到了罪魁祸首它是:

代码语言:javascript
复制
$("#browseBookArea").ajaxSuccess(function(){                               
         $(this).show(300);
         $(this).load("Components/browseBookArea.jsp");
    });

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

代码语言:javascript
复制
$(".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请求之后定义一个成功的处理程序,并且成功的处理程序一定不能是调用该操作的div。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5703440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档