【发布时间】:2021-04-27 18:08:29
【问题描述】:
我正在我的 jsp 页面上按一些标准(例如按价格、按作者)进行订购。并在选择新的排序选项时使用 ajax 重新加载 div 的内容。但是当调用 reload 函数时,它只是在网页上隐藏了 div。
我已经检查过,有 本书需要显示在会话范围内,并且 Jquery 已正确包含。
这是用于选择排序标准的 html:
<select>
<option id="default">Default</option>
<option id="price">By price</option>
<option id="author">By author</option>
</select>
这是处理 select 元素的 click 事件的代码:
$(document).ready(function () {
$('select').change(function () {
$( "select option:selected" ).each(function() {
let sortAttr = $('option:selected').attr('id');
$.ajax({
// passing data to servlet
url: 'http://localhost:8080/sort',
type: 'GET',
// sort criteria
data: ({sort: sortAttr}),
// div needed to be reloaded
success: function () {
$('#mydiv').load(' #mydiv');
}
});
})
});
})
并且需要重新加载 div 的 jsp 页面上的代码:
<div id="mydiv">
<c:forEach var="book" items="${sessionScope.books}">
<div class="col-4"><a href="/home?command=book_details&isbn=${book.ISBN}">
<img src="data:image/jpg;base64,${book.base64Image}">
<h4>${book.title}</h4>
<p>${book.price}$</p>
</a></div>
</c:forEach>
</div>
任何想法为什么会发生这种情况?
编辑
最后,我发现了发生了什么。在.load() 函数中需要注意的重要一点(尤其是对我而言)是,每当我们调用此函数时,它实际上不仅用新数据刷新 div 内容,而且还向提供的 url 发出请求that 页面(我们提供的 url)查找 div 选择器,获取它的内容,然后返回并在当前 div 中插入 that 内容。
注意,如果我们不写 url,.load() 函数将请求 当前 页面(请纠正我,如果我是错了)。
希望对某人有所帮助!
【问题讨论】:
-
嗨,为什么你需要ajax?您是否正在从服务器更改
DOM中的某些内容?另外,你希望这 ->$('#mydiv').load(' #mydiv');做什么? -
嗨!是的,这有点奇怪,但我没有找到如何在 DOM 中执行此操作的解决方案。我正在对存储在 HttpSession 中的元素进行排序。如果我有能力,我会在 DOM 中对它们进行排序。在这里
$('#mydiv').load(' #mydiv');我尝试用旧数据重新加载 div,一旦从服务器接收到新数据 -
所以在您的 servlet 中,您正在会话中设置新值 .. 为什么不将
list作为 json 格式返回并在您的ajax success中构建该 html?检查this 答案。一旦你尝试过,让我知道你是否有任何错误。 -
另外,如果您需要重新加载响应以显示新内容,那么 this 应该可以工作。
-
我在jsp页面上使用的是JSTL,所以把对象放到会话中对我来说更方便,否则我必须重建我的应用程序的一些逻辑。不幸的是,this 链接没有解决问题
标签: javascript jquery ajax jsp