jquery在加载回调函数中失败

时间:2012-06-01 17:49:18

标签: jquery asynchronous load

我一直在阅读有关此问题的几个问题,但我找不到解决问题的方法。对不起,如果我重复以前曾经问过的话。

在代码中:

$("#menuZone").load("northMenu.jsp", function(response, status, xhr) {
                if (status == "error") {
                    var msg = "Error found: ";
                    alert(msg + xhr.status + " " + xhr.statusText);
                }else{
                    // hide admin menus
                    $('.admin').hide();
                }
            });

我要做的是从'northMenu.jsp'加载无序列表,并隐藏具有类admin的项目(li标签)。

在上面的代码中,class的项目未被隐藏,但完整的html已完全插入#menuZone

之后,调用其他地方的函数来显示和隐藏这些项目,工作正常。

jquery load doc中说,“如果提供完整的回调,则会在后处理和执行HTML插入后执行

所以,问题不应该是异步问题!或者可以吗?

1 个答案:

答案 0 :(得分:2)

由于this fiddle适用于您,因此浏览器似乎不存在问题。假设您的代码中没有任何内容篡改load()(合理的假设恕我直言),这只留下两种可能的解释:

  1. $(".admin")没有任何匹配,因为来自AJAX请求的标记不包含class属性,并且这些属性是通过代码在某处添加的。

  2. 这些元素实际上是隐藏的,但后来又被代码的另一部分再次显示(您提到了在您的问题评论中执行的其他AJAX请求)。

  3. 因此,我建议您通过添加complete来电来检测alert()回调:

    // Hide admin menus.
    $(".admin").hide();
    alert($(".admin").length);
    

    有三种可能的结果:

    • 警告打印0,表示(1)为真
    • 警告打印的数字大于0,在这种情况下:
      • 在不关闭提醒框的情况下,检查.admin元素是否可见,
        • 如果不是,则(2)为真
        • 如果是,那么我没想到的其他东西是真的