【问题标题】:JQuery load() status is not making senseJQuery load() 状态没有意义
【发布时间】:2021-01-14 21:48:28
【问题描述】:

所以我有以下代码:

$("#wifi").load("myurl .learn-press-course-results-progress", function(response, status, xhr) {
        if (status == "success") {
            $('#wifi_header').show();
            console.log("wifi");
        };
});

这基本上是试图获取学生在给定的 learnpress 课程中的进度,并且,如果有任何进展(即,如果学生注册了该课程),它会显示课程标题(以及它的进度)他们的仪表板,以便他们可以轻松地继续他们的课程,如下所示:

但是,status 条件的原因,如果学生没有注册,那么 div .learn-press-course-results-progress 不存在,因此我不希望显示课程标题(即,我想要“什么都没有“发生”。)

问题是,即使有成功的条件,也会发生这种情况:

现在有趣的是,我嵌套了 console.log("class") 以查看发生了什么,事实证明,在每个实例中,包括那些加载失败因此它不应该显示标题的实例,我得到了我的控制台中的课程日志。

所以,我的问题是,我该如何解决这个问题?这和状态有关系吗?

编辑:在这个代码块之前,我已经完成了$("#class_header").hide();,这就是我运行show()的原因。

谢谢!

【问题讨论】:

  • 没有通过 jQuery 找到选择器通常不会被认为是任何类型的错误。
  • 问题是,根据 jquery 文档,如果选择器不存在且 AJAX 请求存在错误。
  • 我在.load() 文档(“加载页面片段”部分)的任何地方都没有看到。

标签: javascript jquery jquery-ui


【解决方案1】:

当这个方法执行时,它会检索 ajax/test.html 的内容,但随后 jQuery 会解析返回的文档以找到 ID 为 container 的元素。该元素及其内容被插入到 ID 为 result 的元素中,其余检索到的文档将被丢弃。

jQuery 使用浏览器的.innerHTML 属性来解析检索到的文档并将其插入到当前文档中。在此过程中,浏览器通常会从文档中过滤出<html><title><head> 等元素。因此,.load() 检索到的元素可能与浏览器直接检索到的文档并不完全相同。

如果你打电话:

$("#wifi").load("myurl .learn-press-course-results-progress");

如果页面加载,并且没有任何元素具有.learn-press-course-results-progresswifi 将填充空数据或“”。状态仍然是200或success,因为myurl存在并且可以调用,但是你正在寻找的内容却不见了。

这就是为什么您的$("#wifi") 为空以及触发条件语句的原因。

考虑以下内容。

$("#wifi").load("myurl .learn-press-course-results-progress", function(response, status, xhr) {
  if ($("#wifi").children().length && status == "success") {
    $('#wifi_header').show();
    console.log("wifi");
  };
});

这会检查wifi 中是否有任何元素。如果返回的数据只是文本,则检查文本长度。

if($("#wifi").text().trim() != "" ...){}

其中一个应该对您有所帮助。

【讨论】:

  • 老兄搞定了。我使用 children().length 参数来查找长度为 0 的那些(加载后,如果成功)并隐藏它们。非常感谢!
猜你喜欢
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多