我目前的项目让我经常访问数据库。为此,我通过jQuery Get和Post调用来调用Java Servlet。我想知道使用我从servlet中的数据库收集的数据构建任何HTML是否更好的做法,然后再将其发送回jQuery,或者我是否应该单独使用JavaScript进行HTML注入?例如,假设我有一个带有用户ID和用户名的数据库表。如果我想在此表格下创建一个选择框,哪个更好?还是有更好的方法?如果尝试将从数据库中检索到的最新形式的数据从servlet发送到JavaScript,是否可以更好地处理所有HTML格式?
鉴于以下HTML / JavaScript
<html>
<head>
<script type="text/javascript" src="scripts/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.get("servlet?cmd=getUsers", function(data) {
$("#select").html(data);
}, "html");
});
</script>
</head>
<body>
<div id="select"></div>
</body>
</html>
使用以下Servlet
PrintWriter writer = response.getWriter();
response.setContentType("text/html");
writer.println("<select id='userSelect' name='user'>");
while(resultSet.next()) {
String userId = resultSet.getString("ixUser");
String userName = resultSet.getString("sName");
writer.println("<option value='" + userId + "'>" + userName + "</option>");
}
writer.println("</select>");
鉴于以下HTML / JavaScript
<html>
<head>
<script type="text/javascript" src="scripts/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.get("servlet?cmd=getUsers", function(data) {
$("#select").html("<select id='userSelect' name='user'>");
$(data).find("user").each(function() {
var id = $(this).find("id").text();
var name = $(this).find("name").text();
$("#userSelect").append("<option value='" + id + "'>" + name + "</option>");
});
$("#select").append("</select>");
}, "xml");
});
</script>
</head>
<body>
<div id="select"></div>
</body>
</html>
使用以下Servlet
PrintWriter writer = response.getWriter();
response.setContentType("text/xml");
writer.println("<xml>");
while(resultSet.next()) {
String userId = resultSet.getString("ixUser");
String userName = resultSet.getString("sName");
writer.println("<user>");
writer.println("<id>" + userid + "</id>");
writer.println("<name>" + userName + "</name>");
writer.println("</user>");
}
writer.println("</xml>");
答案 0 :(得分:3)
我选择将原始(好的,JSON)数据发送到客户端并让Javascript处理模板。为什么呢?
关注点分离:您的服务器代码不应该知道表示逻辑。
带宽更少:如果你可以节省几个k /请求(至少),为什么不呢?
答案 1 :(得分:0)
世界似乎正朝着你的第二种方式迈进。这有几个原因:
答案 2 :(得分:0)
我建议只以轻量级方式返回数据,例如JSON。
我的理由:
还有其他一些方法,但在我看来,这是一种更有条理的方法。让客户处理标记处理。
我建议jQote2作为一个很棒的客户端模板工具。 (这太棒了!)
答案 3 :(得分:0)
这些天,很酷的孩子在浏览器上做MVC。 - 您的方法2,但是更复杂的客户端堆栈。
换句话说,您的服务器导出一个提供数据的api,而不是html。
然后,在浏览器上,您的JS应用程序具有单独的模型,视图和控制器代码。请参阅模型和控制器层的Backbone项目,视图/模板层的Mustache。 article.另一个post.
答案 4 :(得分:0)
方法1,因为你对方法2不够熟悉。
关于方法2的几句话。 在字符串连接或对象构建之间进行选择。
var html = '<select...
...
html .= '</select>';
$("#select").append(html);
或
var $sel = $('<select>').attr('id', 'userSelect').attr('name', 'user').
如您所见,$('<tag>')
语法创建了一个新的dom元素。
此外,如果可以的话,返回一个json对象而不是xml。它们更容易在javascript中使用。 所以你可以做到
for (i in data) {
$('<option>').text(data[i].name).val(data[i].id).appendTo($sel);
}
$("#select").append($sel);
然后,有方法3:模板化......