我有一个场景,在我的JSP中,在div标签下,我在scriptlet中有一些内容,每当我从服务器请求回来时,它都会从数据库中读取数据。 以前每次更新时我都会刷新整个页面,它也会加载资源并增加页面大小,所以我想到了为什么不只是更新div标签 -
我的div标签样本就像 -
<div id="container">
<%
StudentLogin name = (StudentLogin)request.getAttribute("name");
List<Cube> personList = (List)request.getAttribute("message");
for(Cube cube: personList){
String usedBy = cube.getUsedby().trim();
boolean alreadyUsed = (usedBy.length()>0);
String ipAddress = cube.getIp();
String cubeName = cube.getCubename();
String details = cube.getDetails();
String since = "Not Busy ";
String cubeCirle = "pricemid";
%>
<div class="<%= mainClass%> ">
<h1> <%= ipAddress%> </h1>
<div class="<%= cubeCirle%>">
<h2> <%= cubeName%> </h2>
</div>
<div class="infos">
<h3> <%= details%> </h3>
<h2> <%= usedBody%> </h2>
<h3> <%= since%> </h3>
</div>
<div class="<%= priceFooterClass%> ">
<div class="<%= buttonclass%> ">
<a href="#" onClick="suc('<%=userName%>','<%=Password%>','<%=usedBody%>','<%=cubeName%>')"> <%= buttonName%> </a>
</div>
</div>
</div>
<% } %>
</div>
因此,对于每个ajax调用,我期待名称和消息的新值,并基于我想要更新我的div标签。
以下是我的ajax电话的样本 -
$.ajax({
url: '${pageContext.request.contextPath}/usercontroller/success.json',
data: JSON.stringify(datamodel),
type: "POST",
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success: function(resp) {
$("#container").html(resp);
},
error: function(e){
alert('Error121212: ' + e);
}
});
通过ajax调用,我意识到它只是替换了div标签内的全部内容,而不是更新或只是调用它。 它尝试使用加载方法,但更新了整个页面,所以我应该做些什么来刷新特定div标签内的内容和更新值,仅此而已。
目标 -
每次从具有名称和消息的服务器获取不同的值,并且基于div标记下的内容必须更改,所以我应该替换整个div命令并创建内部html以将div标记替换为做那个或什么..
答案 0 :(得分:0)
您必须记住,JSP已在服务器上完全处理,并且发送到浏览器的结果是纯HTML。 您不能只是将浏览器端的JSON对象传递给div,并期望进行JSP渲染。
快速而肮脏的解决方案是在成功回调中手动重建标记
$("#container").html("<h1>" + resp.name + "</h1>");
等
更复杂的解决方案是检索您尝试从服务器更新的部分的整个标记,而不仅仅是作为JSON的数据。 或者您可以包含客户端模板解决方案。