【发布时间】:2014-07-25 00:12:11
【问题描述】:
我正在开发一个新闻摘要器,它的一个要求是使用从数据库调用的 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,因为我不熟悉它。这些是我卑微的开始。
更新
我的 SERVLET 代码:
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 ?
}
}
这是发送列表的正确方式吗?
【问题讨论】:
-
是否有理由进行 10 次 ajax 调用而不是一次调用所有 10 篇文章?
-
是的。实际上我对 AJAX 和 Javascript 很陌生。我不确定如何在一次调用中获取 10 篇文章,然后将它们设置为 HTML。任何帮助将不胜感激。
-
从您的服务器返回文章标题列表,而不是只返回一篇文章的标题
-
所以,如果我的 servlet 有一个名为 items 的列表。我可以 out.write(articles) 将列表发送到 ajax。
-
要使用 ajax 将该列表从服务器发送到客户端,您需要对其进行序列化。通常服务器上的对象被序列化为 xml 或 json 以发送到客户端 - 您可以使用这些格式中的任何一种或任何其他您想要的格式。为了从 Java 转换为 Json,您可以使用诸如 google 的 gson 之类的库 - code.google.com/p/google-gson
标签: java javascript html ajax