如何在循环中使用AJAX在servlet中发送和接收数据

时间:2014-07-24 14:43:19

标签: java javascript html ajax

我正在制作一个新闻摘要,其中一个要求是使用从数据库调用的AJAX在网页上动态显示文章标题列表。我已经能够成功配置数据存储区(谷歌应用程序引擎)并使用AJAX调用来显示文章标题。但是,这里有一个大问题。我只能打电话给一个单一的头衔。我想在循环中运行AJAX调用,这样我就可以使用循环的变量i作为唯一引用来显示存储在数据存储区中的10条新闻文章,从1到10。

AJAX代码:

         function change(element) {
            var xmlhttp;
            var i = 1;
            var param = "category=" + element + "&no=" + i; // This i is the key to my operation. 
            alert(param); //testing purpose
            xmlhttp = new XMLHttpRequest();
            xmlhttp.onreadystatechange = function() {
                //alert('function()');
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    var div = document.getElementById('content');
                    div.innerHTML = '';
                    for (i = 1; i <=10; i++) {

                        var a = document.createElement('a');
                        a.href = "#";
                        a.onclick = rem.bind(null, i); 
                        a.innerHTML = '<h2 id="theading'+i+'">'
                                + xmlhttp.responseText + '</h2>'; //the title will go here.

                        div.appendChild(a);
                        div.appendChild(document.createElement('br'));
                    }
                } 

            }

            xmlhttp.open("POST", "/display?" + param, true);
            xmlhttp.send();
}

我还要求建议JavaScript代码而不是jquery,因为我不熟悉它。这些都是我谦虚的开端。

更新

我的服务器代码:

    public class ArticleHandler extends HttpServlet {
        public void service(HttpServletRequest req, HttpServletResponse resp)
                throws IOException {
            resp.setContentType("text/html");

            PrintWriter out = resp.getWriter();

            String category=req.getParameter("category");
            String number=req.getParameter("no");
            int i = Integer.parseInt(number);       
            List<EntityArticles> articles =    RegisterClass.ofy().load().type(EntityArticles.class).filter("category ",category).list();

            out.write(articles); // Is this the correct way to send this list articles ?


        }
    }

这是发送列表的正确方法吗?

3 个答案:

答案 0 :(得分:1)

在responseText中有10篇文章,你可以将服务器代码中的html渲染为responseText(服务器代码中的循环)。然后在ajax成功中你打电话

         var div = document.getElementById('content');
            div.innerHTML = xmlhttp.responseText;

答案 1 :(得分:0)

我已经创建了一个fiddel供你理解检查它。 Ajax Example in fiddle

您正在发帖请求或获取请求吗?我之所以这样问,是因为我认为方法为&#34; POST&#34; ,参数通过&#34; GET&#34; 传入网址。请在代码中更正该部分。

loadXMLDoc=function()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","/ahmadfaizalbh/LaH8F/show/",true);
xmlhttp.send();
}

答案 2 :(得分:0)

最好的选择是拨打ajax一次并获得10个项目。

但是,如果你别无选择,你可以稍微修改一下这个功能:

function change(element, i){
    var xmlhttp;
    //var i=1;
    var param = "category=" + element + "&no=" + i;
    ...
}

以这种方式调用函数(根据需要调用10次):

for(i=1;int <= 10; i++){
    change(element, i);
}

<强>更新 要进行一次ajax调用,您可以执行以下操作:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
    //append html node
    //the object is xmlhttp.responseText. The loop will depend if this is json, html objects, string, etc
}
xmlhttp.open("POST", "/display?" + param, true);
xmlhttp.send();

要获得10个结果,您需要(必须)修改服务器端脚本或servlet。如果您无法访问修改servlet,则无法在单个ajax调用中获取10个项目。