【问题标题】:div element hides when load() function is called调用 load() 函数时隐藏 div 元素
【发布时间】: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


【解决方案1】:

首先,您需要修正代码中的拼写错误。在 JQuery 标识符的开头有空格不会找到所需的元素。

改变这个:$('#mydiv').load(' #mydiv'); 对此:$('#mydiv').load('#mydiv');

另外,我认为你用错了。

查看文档here

【讨论】:

  • 我已经删除了 estra 空间,正如你所说,这并没有解决问题。当我使用$('#mydiv').load() 时,我得到了 Uncaught TypeError: Cannot read property 'indexOf' of undefined
  • 您是否查看过有关其工作原理的文档?此外,this 也会有所帮助。
  • 是的,我检查了文档,将代码更改为$('#mydiv').load('#mydiv');,但这仍然没有解决问题。你说Also, I think you're using it the wrong way是什么意思?
  • 您需要向.load 提供url - 看起来您想要$("#mydiv").load(url + " #mydiv")
  • 我已经尝试过了,但是没有成功。问题是,在其他 jsp 上这工作正常。令人惊讶的是,当调用 .load() 时,mydiv 内容消失了
【解决方案2】:

怎么样

$(function() { // on page load
  $('select').on("change", function() { // when the select changes
    let sortAttr = $('option:selected', this).map(function() {
      return $(this).attr('id')
    }).get(); // get an array of selected IDs
    if (sortArrr.length > 0) {
      $('#mydiv').load('http://localhost:8080/sort?sort=' + 
        sortAttr.join(',') + // make a comma delimited string
        ' #mydiv'); // copy myDiv from the result
    }
  });
})

【讨论】:

  • 抱歉,我是 Javscript 的新手...你能解释一下这里发生了什么吗?
  • @Donny 我已经修改了一点(如果没有选择,为什么要使用 ajax)并添加了 cmets
  • 对不起,这并没有解决问题。但是,谢谢你的解释。
  • 右键单击 div 并单击检查并查看原因。也许它是空的或者你的 JSP 给出错误
  • 感谢您的回答,问题是我没有完全理解文档。需要注意的重要一点(尤其是对我而言)是,当我们调用函数 .load() 时,它实际上不仅会刷新 div 内容,还会向提供的 url 发出请求,然后在该页面上查找 div,获取 div 内容,然后返回并在当前 div 中插入该内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多