简单的AJAX与jquery

时间:2012-10-18 09:56:55

标签: jquery ajax servlets

我需要做一些相当简单的事情:

我有一个获取请求的servlet,然后联系数据库,从中获取信息并将其显示为HTML表(到目前为止,所有这一切都运行良好)。这是servlet中的命令:

RequestDispatcher requestDispatcher = req.getRequestDispatcher("index.jsp");
requestDispatcher.forward(req, resp);

index.jsp是我编写HTML和javascript来显示数据的地方。

现在,我需要的是通过AJAX每30秒左右刷新一次数据,这样我就不会重新加载整个页面了。此外,我应该使用jquery进行整个操作。

最简单的方法是什么?我一直在寻找网站上的一些例子,但我没有设法让它们工作,所以我发布了自己的问题。 我不需要它是花哨的,我只是希望它显示我的表并每隔30秒刷新一次数据(如果有人在数据库中放入一些新数据的话)...

谢谢大家! :)

编辑:

以下是整个代码:

public class IndexServlet extends HttpServlet {

    MoodService moodService;

    public IndexServlet() {
        moodService = new MoodService();
    }

    /**
     * Accepts the request and sends it to the dispatcher which takes the database data and presents it as HTML
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Mood> moodList = moodService.findLastMoods(25); //my way of getting data from database

        req.setAttribute("moodList", moodList);

        RequestDispatcher requestDispatcher =req.getRequestDispatcher("index.jsp");
        requestDispatcher.forward(req, resp);

    }

}

index.jsp:

<html>

<head>
    <title>Previous 25 entries:</title>
    <style type="text/css">
        #container {width:1200px; margin-left:auto; margin-right: auto;}
        #tableheader {width:900px; text-align: center;}
     .field {text-align:center; width:300px;}
    </style>




</head>


<body style="background-color: black;">
<div id="container">

    <table border="1" bordercolor="#FFCC00"  width="900" height="80" cellpadding="3" cellspacing="3" style="border-top-left-radius: 15px; border-top-right-radius: 15px; text-align: center; margin-left:auto; margin-right: auto; background-color:#FFFFCC; font-size: 33px; font-family: Monotype Corsiva ">

        <tr>
            <td style="border-top-left-radius: 10px; border-top-right-radius: 10px;">PREVIOUS 25 ENTRIES:</td>
        </tr>

    </table>

    <%
        List<Mood> moodList = (List<Mood>) request.getAttribute("moodList");
        for (Mood mood : moodList) {

            Integer a = mood.getMoodId();
            String moodId = new String();

            switch (a) {

                case 1:
                    moodId = "Happy";
                    break;

                case 2:
                    moodId = "Sad";
                    break;

                case 3:
                    moodId = "Lonely";
                    break;

                case 4:
                    moodId = "Angry";
                    break;

                case 5:
                    moodId = "In Love";
                    break;

                case 6:
                    moodId = "Content";
                    break;
            } %>

    <table id="table" border="1" bordercolor="#FFCC00"  width="900" cellpadding="3" cellspacing="3" style="text-align: center; margin-left:auto; margin-right: auto; background-color:#FFFFCC;">

        <tr>
            <td class="field"> <%=mood.getUserId()%></td>
            <td  class="field"> <%=moodId%></td>
            <%Date date = new Date(mood.getTime());
                SimpleDateFormat sdf = new SimpleDateFormat("dd:MM:yyyy hh:mm:ss");
                String sDate = sdf.format(date);
            %>
            <td  class="field"> <%=sDate%></td>

        </tr>

    </table>
    <%
        }
    %>



</div>
</body>

</html>

现在,我希望每30秒重新加载整个表部分(以及可能已放入数据库的新数据)并显示为html,浏览器可读。

2 个答案:

答案 0 :(得分:2)

将你的jquery ajax代码添加到javascript函数之一

drawDataTable();

然后设置

的间隔
setInterval(drawDataTable, 30000); //30 sec

<强>更新
再次发布确切的代码,这将更清楚地解释我的观点 你仍然不明白,请先发布你的代码。

<script type="text/javascript">

function drawDataTable(){
 $.ajax({
      url : "NameServlet",
      dataType : 'json',
      error : function(){
      alert("Error Occured");
      },
      success : function(data) {
      //here you will get your data from servlet
      //set data to your table  
      }     
    });
}

setInterval(drawDataTable, 30000);

<script>

答案 1 :(得分:0)

由于您希望每30秒发出一次请求,因此您使用AJAX的方法非常完美。

您必须每隔30秒向同一个servlet发送一个虚拟请求;和servlet可以以JSON格式发送回响应。 Ajax call using jquery

此外,您可以使用Jquery(或普通javascript)计时器定期发送请求。

所以它的工作方式是:浏览器每隔30秒就会在收到请求后向servlet发送请求; servlet将执行适当的业务逻辑,然后以异步方式将响应返回给客户端。